|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2001-11-01 09:52 UTC] bmplummer1 at home dot com
Bug id #13880
Status: Bogus User Modify Dev Modify
From: bmplummer1@home.com
Reported: 2001-10-30 19:25:30
Type: Date/time related
OS: Windows NT/XP
PHP Version: 4.0.6
Summary: date(I) does not correctly identify daylight saving time
--------------------------------------------------------------------------------
[2001-10-30 19:25:30] bmplummer1@home.com
There appears to be a bug in the date() function when using the I (capital i) format.
Date(I) always returns 0 (zero) no matter what the date is. Date(I) is used to determin
if a date occurs during daylight saving time or not. Here is the script I am using:
if (date(I, mktime(0,0,0,6,1,2001))=1) {
do this;
} else {
do that;
}
No mater what the date is it always returns zero. I have tried setting date(I) to a
variable outside of the if/then statement but it always sets the variable to zero. I have
tried setting the timestamp to a variable first and using it in date():
$ts = mktime(0,0,0,6,1,2001);
$ds = date(I, $ts);
That doesn't work either, returns zero. No matter what I do it just doesn't work. Does
this part of date() even work?
Running PHP 4.05 with Zend Optimizer v1.1.0 on Windows NT 4.0 build 1381, CGI version,
Apache/1.3.20 . Also doesn't work on PHP 4.06 on Windows XP, CGI version,
Apache/1.3.22.
Thank you for your consideration and hard work. PHP is a great product. Keep up the good
work!
Bradford Plummer
[2001-10-30 19:33:48] cnewbill@php.net
Two obvious problems with your test script.
I should be in quotes, and = should be ==. Make those changes and try again.
This works okay on Linux.
-Chris
[2001-10-30 19:36:28] cnewbill@php.net
Works on Windows XP as well with 4.0.6.
-Chris
[2001-10-30 19:36:33] cnewbill@php.net
Works on Windows XP as well with 4.0.6.
-Chris
[2001-11-01 01:34:05] bmplummer1@home.com
cnewbill said this:
Two obvious problems with your test script.
I should be in quotes, and = should be ==. Make those changes and try again.
This works okay on Linux.
-Chris
------------------------------------------------------
First of all...
You are right. I left the quotes out of my bug report. I was, however, using them in the
actual script. If you tested my script you may have also noticed that the following
commands return a zero on a Win32 system when they should return a one:
echo date("I", mktime(0,0,0,5,1,2001));
echo date("I", mktime(0,0,0,6,1,2001));
echo date("I", mktime(0,0,0,7,1,2001));
echo date("I", mktime(0,0,0,8,1,2001));
echo date("I", mktime(0,0,0,9,1,2001));
echo date("I", mktime(0,0,0,10,1,2001));
Also returning a zero instead of a one are:
echo date("I", mktime(0,0,0,date("m")-1,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-2,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-3,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-4,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-5,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-6,date("d"),
date("Y")));
echo date("I", mktime(0,0,0,date("m")-7,date("d"),
date("Y")));
So it doesn't seem to matter how I format the original if/then statement because it
will always evaluate incorrectly because date() is doing something screwy on Win32. Also,
I found something else while working on this. When using the M format, date() has a
problem figuring out what month name it is supposed to return. Here is some example
script:
echo date("M, I", mktime(0,0,0,date("m")-1,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-2,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-3,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-4,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-5,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-6,date("d"),
date("Y")));
echo "<br>";
echo date("M, I", mktime(0,0,0,date("m")-7,date("d"),
date("Y")));
That script returns this on my Win32 system:
Oct, 0
Aug, 0
Jul, 0
Jul, 0
May, 0
May, 0
Mar, 0
At least it did for my yesterday (31 Oct 2001). Notice how Jul and May are doubled?
What happened to Apr and Jun?
Could you check in to these issues and let me know what you find out. By the way, thank
you for responding so quickly.
Bradford Plummer
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 07:00:01 2025 UTC |
On my w2k 4.0.4pl1, it returns 1, which is wrong now, since Daylight saving time ended a week ago in Europe. Same for debian-linux. Both are correctly configured. What's your output with this script: <?php var_dump(date("I", mktime(0,0,0,5,1,2001))); ?> On my system, it returns string(1) "1" --JeroenI have two comments about the last entry. First... Jeroen, if you ran the same script that you put in your notes then it should have returned a 1 (one) because the date is May 1 2001 which occurs during daylight saving time. Second... On my Win XP pro version 2002, PHP 4.06 CGI version here is what I get: SCRIPT: <?php var_dump(date("I", mktime(0,0,0,5,1,2001))); ?> OUTPUT: string(1) "0" I haven't made any special changes to my PHP.ini. Do I need to load a special module to get this to work? I have been able to reproduce this on two different systems. On XP and NT 4.0 I used the PHP installer to automatically install PHP. I also reinstalled PHP 4.06 manually on the XP system but I only used the php.ini-dist config file. In the mean time... Anybody know of a daylight saving time detection script before I start writing this by hand?perhaps a simple reality check: what timezone does date("T") report? php could be running in a context with the timezone set to something that doesn't have a daylight savings time. (and there is no module or php.ini setting that has anything do with what date("I") reports. if the timezone is correct, and it is wrong, then your c library is broken.)Ok. I think you nailed it. I am in Arizona. We don't use daylight saving time. When I run date("T") it returns nothing. Blank. Is date("I") dependant on your timezone? If so then it won't work for servers running PHP in Arizona. Uh... Is there an alternative or will I just have to write this by hand?if you want to check if a date occurs during daylight savings time, you have to set your timezone to one that observes daylight savings time. (ie. putenv("TZ=PST8PDT")) there's no bug here.