Jump to content

Really strange problem involving Nov. 4, 2007


hoogie

Recommended Posts

This one doesn't make any sense.

 

I've been using this code to take $date (a date returned from a database) and add one day to it:

 

<?php
$nextdate = date("Y-m-d H:i:s", strtotime($date)+((60*60)*24));
?>

 

This works - I've put probably 6 months worth of data through it with no problem.

 

But when the date from the database is 2007-11-4, it only adds 23 hours.  I get 2007-11-4 23:00:00 back instead of 2007-11-5.

 

I've tested with many other dates including Nov. 4 from other years, and it works perfectly except for November 4, 2007.

 

I can get around this by adding 25 hours instead of 24 (I don't use the time, just the date, so it doesn't matter), but I'm just really wondering what's going on here?  Is this a bug in PHP?

 

I'm running:

XAMPP for Linux 1.6.5a

PHP 5.2.5

MySQL 5.0.51

i suggest that you look into using mktime() to create times/dates. multiplying hours x number of days is asking for trouble, as you've found. maybe something like:

 

<?php
// Get this same time 6 months from now:
$current_time = strtotime($date);
$next_time = mktime(date("G",$current_time),intval(date("i",$current_time)),intval(date("s",$current_time)),date("n",$current_time) + 6, date("j",$current_time), date("Y",$current_time));
$nextdate = date("Y-m-d H:i:s", $next_time);
?>

If you use the strtotime() date/time math parameters, it works correctly -

 

$nextdate = date("Y-m-d H:i:s", strtotime("$date + 1 day"));

 

2007-11-4 gives 2007-11-05 00:00:00

 

that's a good one. I'm not experienced with the nuances of strtotime() so i always fall back on mktime(). i also ran into this problem long ago while developing an employee time-tracking application. everything worked fine until one day in the spring... :-)

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.