我正在开发一个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)
这有什么不对?
这很可能是因为某些时区从标准时间到白昼时间的过渡.
尝试使用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().