我在确定如何验证某个时区是否已经过了某个时间(当前为时区)时遇到了一些麻烦。
例如,如果伦敦的时间已经过了18:00:00
$tz = new DateTimeZone('Europe/London');
$datetime1->setTimezone($tz); // calculates with new TZ now
if ($datetime1->format('H:i:s') >= strtotime('18:00:00')) {
echo "time has passed";
} else {
echo "time has NOT passed";
}
问题在于strtotime('18:00:00')似乎正在使用服务器时间。 如果我回复strtotime('18:00:00');将返回1470247200这是自1970年以来的秒数,但这不会是另一个时区的下午6点时间,例如America / New_York,在撰写本文时尚未过去。
知道如何做到这一点?
谢谢,
答案 0 :(得分:0)
我认为这应该有效:
if ($datetime1->format('H:i:s') >= '18:00:00') {
左侧是一个字符串,每个组件都包含前导零,因此您可以直接与右侧进行字符串比较。
(这假设您认为第二天的午夜没有“通过”18:00:00。)
答案 1 :(得分:0)
使用DateTime
自己的比较功能,因为它包含时区支持:
$tz = new DateTimeZone('Europe/London');
$datetime1->setTimezone($tz); // calculates with new TZ now
$datetime2 = new \DateTime('18:00:00', $tz);
if ($datetime1 >= sdatetime2) {
echo "time has passed";
} else {
echo "time has NOT passed";
}