|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-03-31 05:39 UTC] scochrane at mackaysstores dot co dot uk
I have 2 Servers - 1 has Automatic Daylight Saving on, the other has it off. Both Servers have same PHP version and O/S (NT4 Server).
When I use this:
echo gmdate("Y-m-d", mktime("last Sunday")); // gmdate
it returns:
2003-03-30 on Server 1 and
2003-03-31 on Server 2
-------------------------------
when I use this:
echo date("Y-m-d", mktime("last Sunday")); // no gmdate!
it returns:
2003-03-31 on Server 1 and
2003-03-31 on Server 2
-------------------------------
When I use this:
echo gmdate("Y-m-d", gmmktime("last Sunday")); // gmdate and gmtime!
it returns:
2003-03-31 on Server 1 and
2003-03-30 on Server 2
-------------------------------
when I use this:
echo date("Y-m-d", gmmktime("last Sunday")); // gmmktime!
it returns:
2003-03-31 on Server 1 and
2003-03-30 on Server 2
So I have used every combination and cannot get both Servers to return the correct date. I need it to return 2003-03-30 on both Servers - as it should.
p.s. I cannot just change the 'Automatic Daylight' configuration as I need it to run in over 250 seperate Servers (they may have different OS settings)!
Cheers,
Stuart
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Dec 05 11:00:02 2025 UTC |
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.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.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();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?