ID:               6781
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Closed
 Bug Type:         Date/time related
 Operating System: Linux RH 6.0, 6.1, 6.2
 PHP Version:      4.0.1pl2
 New Comment:

I'm glad this hasn't been deleted!
It's helped solved a problem due to DST.

Thanks :)


Previous Comments:
------------------------------------------------------------------------

[2000-09-17 04:33:46] [EMAIL PROTECTED]

You just discovered daylight savings time.... closing

------------------------------------------------------------------------

[2000-09-17 01:52:01] [EMAIL PROTECTED]

OK, I found out that it was just Daylight Savings Time!

I wish I could just delete this message so my stupidity won't be
displayed so publicly ;)




------------------------------------------------------------------------

[2000-09-17 00:56:01] [EMAIL PROTECTED]

It seems there are dates that have more and dates that have less
seconds, try this quick and dirty code (I pretended all months have 31
days):

  echo "<pre>";
  for ($year=2000; $year < 2005; $year++) {
    for ($month=1; $month <= 12; $month++) {
      for ($day=1; $day <=31; $day++) {
        $diff=mktime(0,0,0,$month,$day+1,$year) -
mktime(0,0,0,$month,$day,$year);
        if ($diff != 86400) echo "$year/$month/$day has $diff
seconds\n";
      } 
    } 
  } 

Results:

2000/3/26 has 82800 seconds
2000/10/29 has 90000 seconds
2001/3/25 has 82800 seconds
2001/10/28 has 90000 seconds
2002/3/31 has 82800 seconds
2002/10/27 has 90000 seconds
2003/3/30 has 82800 seconds
2003/10/26 has 90000 seconds
2004/3/28 has 82800 seconds
2004/10/31 has 90000 seconds


------------------------------------------------------------------------

[2000-09-16 23:41:31] [EMAIL PROTECTED]

I was using the mktime function to calculate the number of days between
two dates by dividing the difference by 86400 (the number of seconds in
a day) when I stumbled across this one (my code came up with fractional
results):

  echo "2001/03/25: has ",mktime(0,0,0,3,26,2001) -
mktime(0,0,0,3,25,2001)," seconds<br>";
  echo "2001/03/26: has ",mktime(0,0,0,3,27,2001) -
mktime(0,0,0,3,26,2001)," seconds<br>";

It seems PHP thinks the number of seconds in 2001/3/25 is 82800!!! 

I'm not sure if this could be a bug in a library, but it even occurs on
an ancient Slackware installation. I tried the same in Perl using the
POSIX module which comes up with the right answer.

Now, to confuse me even more MySQL seems to have the same bug, try
this:

  select unix_timestamp("2001/3/26") - unix_timestamp("2001/3/25");

Is it possible that you copied this bug from the MySQL code?

Anyway, this could start causing big problems in date related software
next year (or maybe nobody would notice)...

My configure line (I don't see how php.ini could be relevant):

./configure --with-apxs=/usr/sbin/apxs --with-xml --with-pdflib
--with-zlib --with-mysql=/usr --with-oracle --with-ldap


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=6781&edit=1

Reply via email to