请检查以下示例:
$date1 = strtotime("tomorrow 4:00 PM");
$date2 = strtotime("16:00:00");
$date3 = strtotime("10 hours");
$date4 = strtotime("+1 day");
echo date("Y m d H:i:s",$date1)."<br>";
echo date("Y m d H:i:s",$date2)."<br>";
echo date("Y m d H:i:s",$date3)."<br>";
echo date("Y m d H:i:s",$date4)."<br>";
它给出了如下输出:
2013 06 10 16:00:00
2013 06 09 16:00:00
2013 06 09 20:50:25
2013 06 10 10:50:25
我正在考虑前两个例子($ date1和$ date2)作为绝对数据,最后两个作为相对日期。现在,只有给出$ date1 / $ date2 / $ date3 / $ date4变量,是否可以说它是相对时间还是绝对时间?
我确实在另一个帖子上找到了解决方案:PHP datetime string differentiation 但是直到我考虑第二个例子($ date2作为绝对值),它才起作用。此外,可能建议进行正则表达式检查,但这似乎也不可靠。
我只是想知道php是否有一些集成方式来告诉它来自它的函数或DateTime对象。我搜索过,但没有找到任何东西。
期待收听您的建议/反馈/可能的解决方案。感谢。
答案 0 :(得分:2)
没有直接的方法,AFAIK,但有一个技巧可以用于strtotime
函数的第二个参数。
function is_absolute_time($time_string) {
$time_shift = time() + 60; // 1 min from now
$time_normal = strtotime($time_string);
$time_shifted = strtotime($time_string, $time_shift);
return $time_normal == $time_shifted;
}
理由很简单:如果时间是绝对的,1分钟的差异不会改变strtotime
的计算,$time_normal
和$time_shifted
都会相同。但是,对于相对时间,差异将是一分钟($time_shift
变量中的值)。
但是这个代码有一个警告。即使是从午夜起不到1分钟的绝对时间(但不是绝对日期),此函数也将返回FALSE
。您可以通过将$time_shift
更改为:
$time_shift = time() + 5; // 5 seconds from now.
此代码现在可以正常工作,直到午夜5秒。我认为你可以安全地低至2.有一个边缘情况,未来1秒可能无效。
要完全解决这个问题,您可以尝试不同的方法:
function is_absolute_time($time_string) {
$epoch = 0; // Epoch
$time_shift = 60; // 1 min from epoch
$time_normal = strtotime($time_string, $epoch);
$time_shifted = strtotime($time_string, $time_shift);
return $time_normal == $time_shifted;
}
您可以直接尝试最后一个解决方案。我只是在这篇文章中建立了解决方案的原因。
答案 1 :(得分:0)
只给出值2013 06 10 16:00:00
,答案很简单:它是绝对的。无论这个绝对时间戳是创建为“绝对”时间戳还是基于与另一个日期的关系,都无法分辨。你所拥有的只是“2013 06 10 16:00:00”,没有“残余相对性”或其中任何类型的东西。
即使这是相对到基督所谓的诞生,但这与大爆炸以来在太空中漂浮的地球有关... * trollface * < / p>