PHP 日期递增错误
PHP date incrementing error
我正在尝试创建一个日历,其中日期递增并且每个日期都是可点击的,link用于搜索。奇怪的是日期停止在 25th October
,并停止递增。即 24th, 25th, 25th, 25th...
日历从哪一天开始并不重要(盯着它看了几天),但在 25th it stops incrementing
。
感谢任何建议。(间隔之后的第二部分可能无关紧要,但包括在内以防万一link)
for ($i = 1; $i <= 30; $i++){
$date = date("d-m-Y", strtotime($date) + 86400);
array_push($array_date, $date);
$separatedate = explode('-', $date);
$getday = date("l", strtotime($date));
print "<button class='submitsearch btn' value=$array_date[$i]>" . ltrim($separatedate[0], '0') . "<br>" . $getday . "<br></button>";
if (!checkdate($separatedate[1] , $separatedate[0]+1 , $separatedate[2])) {
$nextmonth = date("F", strtotime($date) + 86400);
print "<strong>". $nextmonth . "</strong><hr/>";
}
}
这是问题所在:
$date = date("d-m-Y", strtotime($date) + 86400);
您似乎依赖它来增加日期。通常,这会很好......但由于夏令时的变化,当我们有 25 小时的一天时,情况就不是这样了。
我建议您使用 date/time 算术函数(例如 date_add
)来加一天,而不是加 24 小时。或者确保 all 算法在 UTC 中完成,不会有任何时区更改。一般来说,我会尽量避免执行比您真正需要的更多的字符串转换:以惯用的方式保留一个表示 date/time 的变量,然后对其执行算术 - 然后只是 format 那个变量,当你需要的时候。我认为任何地方都不需要调用 strtotime
,如果你这样做是对的。
我正在尝试创建一个日历,其中日期递增并且每个日期都是可点击的,link用于搜索。奇怪的是日期停止在 25th October
,并停止递增。即 24th, 25th, 25th, 25th...
日历从哪一天开始并不重要(盯着它看了几天),但在 25th it stops incrementing
。
感谢任何建议。(间隔之后的第二部分可能无关紧要,但包括在内以防万一link)
for ($i = 1; $i <= 30; $i++){
$date = date("d-m-Y", strtotime($date) + 86400);
array_push($array_date, $date);
$separatedate = explode('-', $date);
$getday = date("l", strtotime($date));
print "<button class='submitsearch btn' value=$array_date[$i]>" . ltrim($separatedate[0], '0') . "<br>" . $getday . "<br></button>";
if (!checkdate($separatedate[1] , $separatedate[0]+1 , $separatedate[2])) {
$nextmonth = date("F", strtotime($date) + 86400);
print "<strong>". $nextmonth . "</strong><hr/>";
}
}
这是问题所在:
$date = date("d-m-Y", strtotime($date) + 86400);
您似乎依赖它来增加日期。通常,这会很好......但由于夏令时的变化,当我们有 25 小时的一天时,情况就不是这样了。
我建议您使用 date/time 算术函数(例如 date_add
)来加一天,而不是加 24 小时。或者确保 all 算法在 UTC 中完成,不会有任何时区更改。一般来说,我会尽量避免执行比您真正需要的更多的字符串转换:以惯用的方式保留一个表示 date/time 的变量,然后对其执行算术 - 然后只是 format 那个变量,当你需要的时候。我认为任何地方都不需要调用 strtotime
,如果你这样做是对的。