对多个状态使用 PHP date_default_timezone_set 未按预期工作

Using PHP date_default_timezone_set for multiple states not working as expected

好的,所以我在同一个 PHP 文件中有一些代码,我试图为澳大利亚的两个州设置默认时区。

ok 首先是阿德莱德时间:

date_default_timezone_set('Australia/Adelaide');
$currentTime = strtotime(date("H:i"));
echo $currentTime;

现在昆士兰时间

date_default_timezone_set('Australia/Queensland');
$currentTimeQld = strtotime(date("H:i"));
echo "<br />" . $currentTimeQld;

SO 昆士兰在夏令时比阿德莱德晚 30 分钟,所以我预计 strtotime 值会更小。 但是我得到了两个 echo 语句的相同输出。

输出: 1507506480 1507506480 任何人都知道为什么。 谢谢

UPDATE: The reason why I want to use strtotime is so I can calculate wether or not to display a open or closed tag

$openTime = strtotime("08:30");
$closeTime = strtotime("17:30");
$openCloseTag = ($currentTime >= $openTime && $currentTime <= $closeTime) ? '<span class="openTag">Open</span>' : '<span class="closeTag">Closed</span>';

创建了一个 DateTime 对象。像这样解决了你的案例:

date_default_timezone_set('Australia/Adelaide');
$currentTime= new DateTime();
$currentTime->setTimestamp(strtotime(date("H:i")));
echo $currentTime->format('H:i');


date_default_timezone_set('Australia/Queensland');
$currentTimeQld = new DateTime();
$currentTimeQld->setTimestamp(strtotime(date("H:i")));
echo "<br />" . $currentTimeQld->format('H:i');

输出:

12:58
12:28 -- 30 mins difference

阅读文档后,我发现没有相对于时区的时间戳这样的东西。所以在这种情况下,我们将使用时区 offset。获取时区偏移量:

$currentTime= new DateTime(null, new DateTimeZone('Australia/Adelaide'));
echo $currentTime->getTimestamp() ."-". $currentTime->getOffset() ."<br />";

$currentTimeQld = new DateTime(null, new DateTimeZone('Australia/Queensland'));
echo $currentTimeQld->getTimestamp() ."-". $currentTimeQld->getOffset() ."<br />";

输出

1507694360-37800 //the second integer number is the offset which is in seconds
1507694360-36000 //the difference of the two is 1800 seconds = 30 mins

既然知道了它们之间的区别,你就可以根据自己的需要来玩了。