ID: 22976 User updated by: scochrane at mackaysstores dot co dot uk Reported By: scochrane at mackaysstores dot co dot uk Status: Bogus Bug Type: Date/time related Operating System: NT4 Server PHP Version: 4.3.0 New Comment:
Fair point - my solution should not work (but it does). Here is more details of the problem: using your code, I ran it with both exceptions. 1. Automatically adjust clock for daylight saving changes = ON [code] echo "with GMT: ".date("H:i:s D M d, Y",strtotime("Last Sunday GMT")); echo "<br>without GMT: ".date("H:i:s D M d, Y",strtotime("Last Sunday")); [/code] returns: with GMT: 23:00:00 Sat Mar 29, 2003 without: 23:00:00 Sat Mar 29, 2003 2. Automatically adjust clock for daylight saving changes = OFF [code] echo "with GMT: ".date("H:i:s D M d, Y",strtotime("Last Sunday GMT")); echo "<br>without GMT: ".date("H:i:s D M d, Y",strtotime("Last Sunday")); [/code] returns: with GMT: 00:00:00 Sun Mar 30, 2003 without: 00:00:00 Sun Mar 30, 2003 So you see the GMT does nothing!!! And there is no way to have the same script run with both exceptions. Am I the only one to have encountered this problem? Previous Comments: ------------------------------------------------------------------------ [2003-03-31 10:01:03] [EMAIL PROTECTED] Your code makes no sense. mktime() does not understand "Last Sunday", so if this code fixed your problem, then you have a whole bunch of other problems. ------------------------------------------------------------------------ [2003-03-31 09:56:53] scochrane at mackaysstores dot co dot uk Thanks for your reply- that failed also though, I tracked down the error - it seems that systems that have 'Automatically adjust Daylight Saving' switch on will return the wrong date. I managed to get both exceptions to work using: if(date("I") == 1){ // Daylight Saving is ON return gmdate("Y-m-d", mktime("Last Sunday")); } else { // Daylight Saving is OFF return date("Y-m-d", strtotime("Last Sunday")); } echo last_sunday(); ------------------------------------------------------------------------ [2003-03-31 09:41:13] [EMAIL PROTECTED] strtotime() uses the local timezone adjusted time unless you stick "GMT" at the end. Try this: echo date("H:i:s D M d, Y",strtotime("Last Sunday GMT")); echo date("H:i:s D M d, Y",strtotime("Last Sunday")); I am in PDT and right now this gives me: 16:00:00 Sat Mar 29, 2003 00:00:00 Sun Mar 30, 2003 which shows that strtotime adjusts for GMT correctly. Midnight last Sunday in GMT was actually Saturday in my timezone as GMT is 8 hours ahead of me, so it gave me 4pm Saturday. And when I pass it "Last Sunday" without the GMT, which means I am asking for midnight last sunday in my own timezone, I get exactly that. ------------------------------------------------------------------------ [2003-03-31 08:21:28] scochrane at mackaysstores dot co dot uk By substituting mktime() with strtotime() has the same problem. On the strtotime page of the manual - one of the examples given states 'echo strtotime ("last Monday"), "\n";' - so I beleave my sytax is valid. With my script ammended to be valid (as below) I think this is a bug. function last_sunday() { return gmdate("Y-m-d", strtotime("Last Sunday")); } echo "Last Sunday is returned as: ".last_sunday(); With Daylight saving on the above = 2003-03-29 With Daylight saving off the above = 2003-03-30 I have also use the GMT keyword with strtotime(), but this fails also. ------------------------------------------------------------------------ [2003-03-31 05:51:58] [EMAIL PROTECTED] Sorry, but your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php as this bug system is not the appropriate forum for asking support questions. Thank you for your interest in PHP. Neither mktime() nor gmmktime() understands arguments like "last Sunday" -- please go and re-read the documentation for those functions. If you have any further questions, please ask them on the php-general list. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/22976 -- Edit this bug report at http://bugs.php.net/?id=22976&edit=1