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