将PHP date_default_timezone_set用于多个未按预期工作的状态

时间:2017-10-08 23:55:22

标签: php datetime strtotime

好的,所以我在同一个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;

在夏令时期间,昆士兰在阿德莱德后面30分钟,所以我希望strtotime价值更低。 但是我为两个echo语句得到了相同的输出。

输出: 1507506480 1507506480 谁知道为什么。 感谢

  

更新:我想使用strtotime的原因是我可以计算   是否显示打开或关闭的标签

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

1 个答案:

答案 0 :(得分:1)

创建了一个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

现在,知道它们之间存在差异,您可以根据需要随意使用它。