ID: 40937 User updated by: ctrlaltca at libero dot it Reported By: ctrlaltca at libero dot it -Status: Feedback +Status: Open Bug Type: Date/time related Operating System: Slackware Linux PHP Version: 5.2.1 New Comment:
[EMAIL PROTECTED]:~# php -r "echo date_default_timezone_get();" Europe/Berlin It's an alias for GMT+1 Previous Comments: ------------------------------------------------------------------------ [2007-04-03 18:52:22] [EMAIL PROTECTED] What does the following output: echo date_default_timezone_get(), "\n"; ------------------------------------------------------------------------ [2007-03-31 17:51:15] ctrlaltca at libero dot it sorry, i forgot to update bug summary ------------------------------------------------------------------------ [2007-03-31 17:49:20] ctrlaltca at libero dot it First, thank you for the reply. I tried the script: |Sat, 31 Mar 2007 00:00:00 +0000=Sat, 31 Mar 2007 17:18:59 +0000|1174780800=1174843139|20070324 230000=20070325 171859| I understand that strtotime($d. "-1 day") is an alias for "-24 hours", and dst handling routines adds one more hour to compensate. Afaik summer time begins and ends at 1:00 a.m. Universal Time (GMT) in Europe, and at 2:00 a.m. localtime in the US. Other states do it at midnight (example: Chile). Trying this other script it seems that php updates the time at midnight: <?php $day=24; $mo=03; $year=2007; for($i=0; $i<=7; $i++) { $a=mktime(22, 0, 0, $mo,$day, $year); $b=date("r",$a); $c=strtotime($b. "+" . $i . " hour"); $curdate=date("Ymd His",$c); echo "\n|".$b."|".$c."|".$curdate."|"; } echo "\n"; ?> Do all we live in Chile? :) Or am i wrong again? Thank you again for your comment, i'll use gm* class of functions. ------------------------------------------------------------------------ [2007-03-28 19:11:01] [EMAIL PROTECTED] We are happy to tell you that you just discovered Daylight Savings Time. For more information see: http://webexhibits.org/daylightsaving/b.html Instead of using mktime/date consider using gmmktime and gmdate which do not suffer from DST. Try this script instead, that also shows the time to see what's happening: <?php $day=date("j"); $mo=date("n"); $year=date("Y"); for($i=6; $i>=0; $i--) { $a=mktime(0, 0, 0, $mo,$day, $year); $b=date("r",$a); $c=strtotime($b. "-" . $i . " day"); $curdate=date("Ymd His",$c); $d=date("r"); $e=strtotime($d. "-" . $i . " day"); $curdate2=date("Ymd His",$e); echo "\n|".$b."=".$d."|".$c."=".$e."|".$curdate."=".$curdate2."|"; } ?> ------------------------------------------------------------------------ [2007-03-28 15:21:00] ctrlaltca at libero dot it Description: ------------ It seems that the date() function "jumps over" sundays when converting timestamps not referring to midnight. Similar to #461 Reproduce code: --------------- <?php $day=date("j"); $mo=date("n"); $year=date("Y"); for($i=6; $i>=0; $i--) { $a=mktime(0, 0, 0, $mo,$day, $year); $b=date("r",$a); $c=strtotime($b. "-" . $i . " day"); $curdate=date("Ymd",$c); $d=date("r"); $e=strtotime($d. "-" . $i . " day"); $curdate2=date("Ymd",$e); echo "\n|".$b."=".$d."|".$c."=".$e."|".$curdate."=".$curdate2."|"; } ?> Expected result: ---------------- I expect this script to return the right "Ymd" dates of the last seven days. Actual result: -------------- It works: |Wed, 28 Mar 2007 00:00:00 +0200=Wed, 28 Mar 2007 17:13:37 +0200|1175032800=1175094817|20070328!=20070328| but when it finds a sunday, dates are shifted off of 1 day: |Wed, 28 Mar 2007 00:00:00 +0200=Wed, 28 Mar 2007 17:13:37 +0200|1174773600=1174835617|20070324!=20070325| ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40937&edit=1