我正在开发一个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>';
}
一切正常,但在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
这里有什么问题?
答案 0 :(得分: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>';
}
输出:
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
如果日期采用日期年份格式,则可能需要先使用DateTime::createFromFormat()
。
答案 1 :(得分:3)
你为什么这么复杂?
对于使用strtotime()的逻辑,你可以这样做
<?php
$epochdate = "17 August 2015";
for ($i=0; $i<=20; $i++) {
echo date('Y-m-d H:i', strtotime($epochdate.' +'.$i.' weeks');
echo "<br>";
}