Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:9683 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 47899 invoked by uid 1010); 6 May 2004 12:09:15 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 47806 invoked from network); 6 May 2004 12:09:14 -0000 Received: from unknown (HELO relaycl01.probusiness-cis.de) (212.59.36.36) by pb1.pair.com with SMTP; 6 May 2004 12:09:14 -0000 Received: (from root@localhost) by relaycl01.probusiness-cis.de (8.11.6/8.11.6) id i46C8lM22702 for internals@lists.php.net; Thu, 6 May 2004 14:08:47 +0200 Received: (from uucp@localhost) by relaycl01.probusiness-cis.de (8.11.6/8.11.6) id i46C8jg22677 for ; Thu, 6 May 2004 14:08:45 +0200 Received: from has03.hannover(192.168.100.6) via SMTP by relaycl.hannover, id smtpd9aVRsL; Thu May 6 14:08:17 2004 Received: by has03.hannover with Internet Mail Service (5.5.2653.19) id ; Thu, 6 May 2004 14:08:17 +0200 Message-ID: <3F011414BCED3B488547E2CCCC16E2FE015397E5@has03.hannover> To: internals@lists.php.net Date: Thu, 6 May 2004 14:08:09 +0200 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="iso-8859-1" X-Virus-Scanned: by AMaViS Subject: RE: [PHP-DEV] Itanium2 test from 15.04.-14.05. From: KHofmann@PROBUSINESS.DE (Kai Hofmann) > > 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 . "
\n"; echo ':' . $year . '/' . $month . '/' . ($day - ($weekday - 1)) . ' : ' . $sday . ":

\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 . "
\n"; echo ':' . $year . '/' . $month . '/' . ($day - ($weekday - 1)) . ' : ' . $sday . ":

\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