echo mktime(2,0,0,4,-6,2004); /* or 0 to -5 */
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