Giving a starting date, I'm adding four times seven days to get 5 different dates separated exactly a week each one.
//$date = '28-10-2010'; $timestamp = mktime( 0, 0, 0, 10, 01, 2010 ); echo "Date=".date( 'd-m-Y', $timestamp )."<br>"; $timestamp += (60*60*24*7); echo "Date=".date( 'd-m-Y', $timestamp )."<br>"; $timestamp += (60*60*24*7); echo "Date=".date( 'd-m-Y', $timestamp )."<br>"; $timestamp += (60*60*24*7); echo "Date=".date( 'd-m-Y', $timestamp )."<br>"; $timestamp += (60*60*24*7); echo "Date=".date( 'd-m-Y', $timestamp )."<br>";
The code outputs this:
Date=01-10-2010 Friday Date=08-10-2010 Friday Date=15-10-2010 Friday Date=22-10-2010 Friday Date=29-10-2010 Friday
Which as long as I know it's correct. But, see what happens when going through the 2010-10-31 and 2010-11-01
$timestamp = mktime( 0, 0, 0, 10, 28, 2010 ); [...]
Curiously it outputs this:
Date=28-10-2010 Thursday Date=03-11-2010 Wednesday Date=10-11-2010 Wednesday Date=17-11-2010 Wednesday Date=24-11-2010 Wednesday
What's happening? Second date should be 04-11-2010! Also, I saw that this "fail" happens every ten years! Is this something related with the daylight savings time? If so, how do I solve it? Is there anything that i am overlooking?
Edit: Ok, I outputed the time, just to see what happens and this is what I got now:
Date=28-10-2010 Thursday :: 00:00:00 Date=03-11-2010 Wednesday :: 23:00:00 Date=10-11-2010 Wednesday :: 23:00:00 Date=17-11-2010 Wednesday :: 23:00:00 Date=24-11-2010 Wednesday :: 23:00:00
Seems something related with the time, something happens at 2010-11-31...
To add 2 hours in the current time, we will use the DATE_ADD() function. mysql> select DATE_ADD(now(),interval 2 hour);
SELECT DATE_TRUNC('month', current_date()); Get the last day of the current month as a DATE value using the DATEADD and DATE_TRUNC functions: SELECT DATEADD('day',-1, DATE_TRUNC('month', DATEADD(day,31,DATE_TRUNC('month',current_date()) ) ) );
Never use math like 60*60*24*7 to add/subtract days (because of daylight time saving), use strtotime
or mktime
instead:
$timestamp = strtotime('+7 days', $timestamp); // Or something like this (it's OK to have day parameter <= 0 or > 31) $timestamp = mktime(0, 0, 0, $month, $day + 7, $year);
Your example will be more obvious if you'll output time as well:
$timestamp = mktime(0, 0, 0, 10, 28, 2010); echo date('Y-m-d H:i:s', $timestamp) . "\n"; $timestamp += 60*60*24*7; echo date('Y-m-d H:i:s', $timestamp) . "\n";
Output:
2010-10-28 00:00:00 2010-11-03 23:00:00
Here you have 2010-11-03 23:00:00
instead of 2010-11-04 00:00:00
because one of the days (31 Oct) is 25 hours long instead of 24.
In case someone needs this, just like me referencing the site: Today, current time, Y-m-d H:i:s, plus +7 Days. OR you could add +3 Months, etc.
$timestamp=strtotime("+7 Days"); $nowtime = date('Y-m-d H:i:s', $timestamp);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With