在PHP函数中计算日期时出错

Pan*_*wal 0 php strtotime

我正在开发一个php项目,我需要从特定日期获取接下来20周的所有日期,我正在尝试遵循逻辑

$epochdate = strtotime("17 August 2015");

for ($i=$epochdate + 604800, $i < $epochdate + ( 604800 * 20 ); $i = $i+604800, $j++) { 
   echo date('Y-m-d H:i:s', $i);
   echo '</br>';
}
Run Code Online (Sandbox Code Playgroud)

一切都运转良好,但它在2015-10-19之后给出了错误的日期..这是输出

2015-08-24 00:00:00
2015-08-31 00:00:00
2015-09-07 00:00:00
2015-09-14 00:00:00
2015-09-21 00:00:00
2015-09-28 00:00:00
2015-10-05 00:00:00
2015-10-12 00:00:00
2015-10-19 00:00:00
2015-10-25 23:00:00//it should be 2015-10-26
2015-11-01 23:00:00
2015-11-08 23:00:00
2015-11-15 23:00:00
2015-11-22 23:00:00
2015-11-29 23:00:00
2015-12-06 23:00:00
2015-12-13 23:00:00
2015-12-20 23:00:00
2015-12-27 23:00:00
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

rin*_*t.6 5

这很可能是因为某些时区从标准时间到白昼时间的过渡.

尝试使用DateTime该类:

$epochdate = new DateTime("2015-08-17");
for ($i = 0; $i < 20; $i++) {
  $epochdate->modify('+1 week');
  echo $epochdate->format('Y-m-d H:i-s') . '<br>';
}
Run Code Online (Sandbox Code Playgroud)

输出:

2015-08-24 00:00-00
2015-08-31 00:00-00
2015-09-07 00:00-00
2015-09-14 00:00-00
2015-09-21 00:00-00
2015-09-28 00:00-00
2015-10-05 00:00-00
2015-10-12 00:00-00
2015-10-19 00:00-00
2015-10-26 00:00-00
2015-11-02 00:00-00
2015-11-09 00:00-00
2015-11-16 00:00-00
2015-11-23 00:00-00
2015-11-30 00:00-00
2015-12-07 00:00-00
2015-12-14 00:00-00
2015-12-21 00:00-00
2015-12-28 00:00-00
2016-01-04 00:00-00
Run Code Online (Sandbox Code Playgroud)

如果日期以日月格式显示,则可能需要先使用DateTime::createFromFormat().