gpt4 book ai didi

具有较早日期时间的 PHP Datetime 对象具有较高的时间戳值?

转载 作者:搜寻专家 更新时间:2023-10-31 21:51:02 24 4
gpt4 key购买 nike

我正在尝试执行一个函数,如果现在处于一周中的特定时间和特定日期之间,该函数将返回 true。

问题是,unix 时间戳似乎不匹配。

<?php
function isWorkingTime() {
$now = new DateTime(date('Y-m-d H:i:00'), new DateTimeZone(date('T')));

$tz = $now->getTimezone();
if(strtolower($tz->getName()) != 'est'){
$now->setTimezone(new DateTimeZone('EST'));
}

$min = clone $now;
$min->setTime(8,30,0);

$max = clone $now;
switch($now->format('N')){
case 1:
case 2:
case 3:
case 4:
$max->setTime(17,30,0);
break;
case 5:
$max->setTime(16,30,0);
break;
default:
return false;
break;
}

return ($now >= $min && $now < $max);
}
?>

如果我继续尝试输出 3 个日期时间对象,如下所示:

<?php
echo 'now: '.$now->format('Y-m-d H:i:s U T').PHP_EOL;
echo 'min: '.$min->format('Y-m-d H:i:s U T').PHP_EOL;
echo 'max: '.$max->format('Y-m-d H:i:s U T').PHP_EOL;
?>

我明白了:

now: 2017-02-15 13:17:00 1487164620 EST
min: 2017-02-15 08:30:00 1487165400 EST
max: 2017-02-15 17:30:00 1487197800 EST

为什么 $min 时间戳大于 $now?

我正在运行 PHP 5.6.30

最佳答案

Docu 指出你不应该使用 EST,并警告“奇怪”的效果:

Warning Please do not use any of the timezones listed here (besides UTC), they only exist for backward compatible reasons, and may expose erroneous behavior.

http://php.net/manual/en/timezones.others.php

使用适当的时区名称(如 America/New_York)运行您的代码片段不会显示此问题:https://3v4l.org/NR3cg

明确问题/错误:

使用美国东部标准时间: https://3v4l.org/BdUan

02/15/2017 6:00 am 1487138400 -> TS says 02/15/2017 @ 6:00am (UTC) (wrong)
02/15/2017 8:30 am 1487165400 -> TS says 02/15/2017 @ 1:30pm (UTC) (right)

使用美国/纽约: https://3v4l.org/ndISv

02/15/2017 6:00 am 1487156400 -> TS says 02/15/2017 @ 11:00am (UTC) (right)
02/15/2017 8:30 am 1487165400 -> TS says 02/15/2017 @ 1:30pm (UTC) (right)

(虽然一切都应该是相同的时间戳,但与第 2 行比较)

关于具有较早日期时间的 PHP Datetime 对象具有较高的时间戳值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42257178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com