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 = mkti
I will never understand why people use this horrible mktime
function.
In case you are on PHP5.3 yet, you might want to consider using
$period = new DatePeriod(
new DateTime('28-10-2010'),
DateInterval::createFromDateString('1 week'),
4);
foreach ( $period as $dt ) {
echo $dt->format( "l Y-m-d H:i:s\n" );
}
Without PHP5.3 you can still use
for($i=0; $i<=4; $i++) {
echo date('Y-m-d', strtotime("+$i weeks 28-10-2010")), PHP_EOL;
}
DateTime questions are pretty common on SO, so you might find interesting cases when searching.
It looks like you moved to daylight time savings or back from them.
POSIX time (timestamp) is always UTC while local time is UTC+X were X may change from date to date according to time savings.
It really seems to be time zone/DST related.
Adding
date_default_timezone_set('UTC');
as the first line solves the issue (as you no longer use any DST settings).
I have had a great deal of success with this methodology for adding days, though i have not tested with your format:
$date = The value of the database from your query
$daysahead = The number of days ahead you want to calculate
$final_date = date(“m/d/Y”, strtotime($date) + (86400 * $daysahead));
echo $final_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);