RE: [PHP] Most bizarre date problem ever
| From: | Ford, Mike [LSS] | Date: | Wed, 14 Apr 2004 14:25:07 +0000 |
| Subject: | RE: [PHP] Most bizarre date problem ever | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-183319@lists.php.net to get a copy of this message | ||
On 10 April 2004 16:11, Brian Dunning wrote:
> Check this out: I'm returning a list of the last 30 days, looping
> through i, subtracting it from $end_date where $end_date is 2004-04-10
> 00:00:00. I'm just trying to derive a timestamp $check_date for each
> iteration, like 1081321200. Here's the code within the loop:
>
> $check_date = mktime(0, 0, 0, substr($end_date, 5, 2),
> substr($end_date, 8, 2) - $i, substr($end_date, 0, 4), -1);
>
> Note that this works PERFECTLY for every date, and always has. Except
> for one particular day. When $end_date - $i is supposed to be
> April 4,
> the timestamp returned is -7262, which it thinks is 12/31/1969.
This looks like a Daylight Savings timeshift bug on your system (and there are more of those around
than you can shake a stick at!). Because of such problems, you should never use a time anywhere
near the DST hour-change when you are calculating consecutive dates, and most especially not a time
that could conceivably be shifted into the adjacent day (i.e. 00:00-00:59) -- always use something
squarely in the middle of the day, such as midday:
$check_date = mktime(12, 0, 0, substr($end_date, 5, 2), substr($end_date, 8, 2) - $i,
substr($end_date, 0, 4), -1);
Cheers!
Mike
---------------------------------------------------------------------
Mike Ford, Electronic Information Services Adviser,
Learning Support Services, Learning & Information Services,
JG125, James Graham Building, Leeds Metropolitan University,
Beckett Park, LEEDS, LS6 3QS, United Kingdom
Email: m.ford@leedsmet.ac.uk
Tel: +44 113 283 2600 extn 4730 Fax: +44 113 283 3211