# Itanium2 test from 15.04.-14.05.

- Thread: https://externals.io/message/9683
- Original archive: https://news-web.php.net/php.internals/9683
- Started by Kai Hofmann on 2004-05-06T12:08:09+00:00
- Messages: 1
- Reply by email to internals@lists.php.net
- More for agents: search with https://externals.io/search.md?q={query} · JSON API at https://externals.io/api · documentation at https://externals.io/llms.txt

---

## #9683 — Kai Hofmann — 2004-05-06T12:08:09+00:00

URL: https://externals.io/message/9683#9683

> > […]
> 
> This returns 1080176400 (2004-03-25 02:00:00) here (PHP 4.3.6) which 
> looks ok to me.
> 
> What are the values on your system?

ok I have some problems with test values here now, but I can provide the
original phpgw code
that is affected and the values from it:

$sday = mktime(2,0,0,$month,$day - ($weekday - 1),$year);
echo ':' . $day . ':' . $weekday . "<br />\n";
echo ':' . $year . '/' . $month . '/' . ($day - ($weekday - 1)) . ' : ' .
$sday . ":<br /><hr />\n";



Output values here 32bit linux machine:

:1:4
:2004/4/-2 : 1080518400:
:1:2
:2004/6/0 : 1085961600:
:1:6
:2004/05/-4 : 1082937600:
:1:6
:2004/05/-4 : 1082937600:



output values 64 bit itanium2:

:1:4
:2004/4/-2 : 1080694800:
:1:2
:2004/6/0 : 1085965200:
:1:6
:2004/05/-4 : 1083286800:
:1:6
:2004/05/-4 : 1083286800:



The complete function within this code was found is:


		function get_weekday_start($year,$month,$day)
		{
			$weekday = $this->day_of_week($year,$month,$day);
	
switch($GLOBALS['phpgw_info']['user']['preferences']['calendar']['weekdaysta
rts'])
			{
				// Saturday is for arabic support
				case 'Saturday':
					$this->days = Array(
						0 => 'Sat',
						1 => 'Sun',
						2 => 'Mon',
						3 => 'Tue',
						4 => 'Wed',
						5 => 'Thu',
						6 => 'Fri'
					);
					switch($weekday)
					{
						case 0:
							$sday =
mktime(2,0,0,$month,$day - 1,$year);
							break;
						case 6:
							$sday =
mktime(2,0,0,$month,$day,$year);
							break;
						default:
							$sday =
mktime(2,0,0,$month,$day - ($weekday + 1),$year);
							break;
					}
					break;
				case 'Monday':
					$this->days = Array(
						0 => 'Mon',
						1 => 'Tue',
						2 => 'Wed',
						3 => 'Thu',
						4 => 'Fri',
						5 => 'Sat',
						6 => 'Sun'
					);
					switch($weekday)
					{
						case 0:
							$sday =
mktime(2,0,0,$month,$day - 6,$year);
							break;
						case 1:
							$sday =
mktime(2,0,0,$month,$day,$year);
							break;
						default:
							$sday =
mktime(2,0,0,$month,$day - ($weekday - 1),$year);
echo ':' . $day . ':' . $weekday . "<br />\n";
echo ':' . $year . '/' . $month . '/' . ($day - ($weekday - 1)) . ' : ' .
$sday . ":<br /><hr />\n";
							break;
					}
					break;
				case 'Sunday':
				default:
					$this->days = Array(
						0 => 'Sun',
						1 => 'Mon',
						2 => 'Tue',
						3 => 'Wed',
						4 => 'Thu',
						5 => 'Fri',
						6 => 'Sat'
					);
					$sday = mktime(2,0,0,$month,$day -
$weekday,$year);
					break;
			}
			return $sday - 7200;
		}


after I changed this code by the following patch, it works as expected on
both platforms:

Index: class.datetime.inc.php
===================================================================
RCS file: /cvsroot/phpgwapi/phpgwapi/inc/class.datetime.inc.php,v
retrieving revision 1.5.2.12.2.8
diff -u -r1.5.2.12.2.8 class.datetime.inc.php
--- class.datetime.inc.php	1 May 2004 09:32:26 -0000	1.5.2.12.2.8
+++ class.datetime.inc.php	5 May 2004 11:41:19 -0000
@@ -216,15 +216,45 @@
 					);
 					switch($weekday)
 					{
-						case 0:
-							$sday =
mktime(2,0,0,$month,$day - 1,$year);
-							break;
 						case 6:
-							$sday =
mktime(2,0,0,$month,$day,$year);
 							break;
-						default:
-							$sday =
mktime(2,0,0,$month,$day - ($weekday + 1),$year);
+						case 0:
+						        if ($day == 1)
+						        {
+						         	if ($month
== 1)
+						        	{
+
--$year;
+
$month = 12;
+						         	}
+						         	else
+						         	{
+
--$month;
+						         	}
+						         	$day =
$this->days_in_month($month,$year);
+						        }
+						        else
+						        {
+						        	--$day;
+						        }
 							break;
+						default:
+						        if ($day <=
($weekday + 1))
+						        {
+						         	if ($month
== 1)
+						        	{
+
--$year;
+
$month = 12;
+						         	}
+						         	else
+						         	{
+
--$month;
+						         	}
+						         	$day =
$this->days_in_month($month,$year) - $weekday;
+						        }
+						        else
+						        {
+						        	$day -=
($weekday + 1);
+						        }
 					}
 					break;
 				case 'Monday':
@@ -239,15 +269,45 @@
 					);
 					switch($weekday)
 					{
-						case 0:
-							$sday =
mktime(2,0,0,$month,$day - 6,$year);
-							break;
 						case 1:
-							$sday =
mktime(2,0,0,$month,$day,$year);
 							break;
-						default:
-							$sday =
mktime(2,0,0,$month,$day - ($weekday - 1),$year);
+						case 0:
+						        if ($day <= 6)
+						        {
+						         	if ($month
== 1)
+						        	{
+
--$year;
+
$month = 12;
+						         	}
+						         	else
+						         	{
+
--$month;
+						         	}
+						         	$day =
$this->days_in_month($month,$year) + ($day - 6);
+						        }
+						        else
+						        {
+						        	$day -= 6;
+						        }
 							break;
+						default:
+					        	if ($day <=
($weekday == 0) ? 6 : ($weekday-1))
+					        	{
+				         			if ($month
== 1)
+				        			{
+
--$year;
+
$month = 12;
+				         			}
+				         			else
+				         			{
+
--$month;
+				         			}
+				         			$day =
$this->days_in_month($month,$year) + ($day - (($weekday == 0) ? 6 :
($weekday-1)));
+				       			}
+				       			else
+				      			{
+				        			$day -=
($weekday-1);
+				        		}
 					}
 					break;
 				case 'Sunday':
@@ -261,9 +321,25 @@
 						5 => 'Fri',
 						6 => 'Sat'
 					);
-					$sday = mktime(2,0,0,$month,$day -
$weekday,$year);
-					break;
+				        if ($day <= $weekday)
+				        {
+				         	if ($month == 1)
+				        	{
+				          		--$year;
+				          		$month = 12;
+				         	}
+				         	else
+				         	{
+				         		--$month;
+				         	}
+				         	$day =
$this->days_in_month($month,$year) + ($day - $weekday);
+				        }
+				        else
+				        {
+				        	$day -= $weekday;
+				        }
 			}
+			$sday = mktime(2,0,0,$month,$day,$year);
 			return $sday - 7200;
 		}
 


any ideas? 


Greetings and Thanks

Kai Hofmann
