我正在尝试检查某个时间是否过去。解决方案1有效,但使用strtotime的解决方案2和3则不然。任何想法为什么strtotime解决方案失败了这个日期,当它们工作正常时,日期不是那么遥远(f.ex.使用27.05.2035工作)?
<?php
$date = "27.05.2045";
$hour = "22";
$min = "15";
// 1. This one works
$datetime = DateTime::createFromFormat('d.m.Y H:i', $date.' '.$hour.':'.$min);
$now = new DateTime();
if ($datetime < $now)
{
echo "Datetime is in the past";
}
else if ($datetime > $now)
{
echo "Datetime is in the future";
}
// 2. Does not work
if (time() > strtotime($date.' '.$hour.':'.$min))
{
echo "Datetime is in the past (strtotime)";
}
else if (time() < strtotime($date.' '.$hour.':'.$min))
{
echo "Datetime is in the future (strtotime)";
}
// 3. Using another date format but still does not work
$array = explode('.', $date);
$date_converted = $array[2].'-'.$array[1].'-'.$array[0];
if (time() > strtotime($date_converted.' '.$hour.':'.$min))
{
echo "Datetime is in the past (strtotime with converted date)";
}
else if (time() < strtotime($date_converted.' '.$hour.':'.$min))
{
echo "Datetime is in the future (strtotime with converted date)";
}
?>
答案 0 :(得分:1)
32位整数最大值使得无法表示2038年1月19日之后的日期。
解决方案是:
DateTime
个对象,这些对象不代表使用自1970年以来经过的秒数的日期,而是使用每个时间单位的字段。有关详细信息,请参阅 The 2038 Year Problem 。