使用PHP date\u default\u timezone\u设置多个状态不能按预期工作

使用PHP date\u default\u timezone\u设置多个状态不能按预期工作,php,datetime,strtotime,Php,Datetime,Strtotime,好的,我在同一个PHP文件中有一些代码,我试图为澳大利亚的两个州设置默认时区 好的,首先是阿德莱德时间: date_default_timezone_set('Australia/Adelaide'); $currentTime = strtotime(date("H:i")); echo $currentTime; 现在是昆士兰时间 date_default_timezone_set('Australia/Queensland'); $currentTimeQld = strtotime(d

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

好的,首先是阿德莱德时间:

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分钟,所以我预计strotime的值会更小。 但两个echo语句的输出相同

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

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

$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');
在阅读文档之后,我发现不存在与时区相关的时间戳。所以在这种情况下,我们将使用时区偏移。获取时区偏移:

$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 />";

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

原因可能是昆士兰时区已被弃用,如。@Jixone Hi。我试着使用date_default_timezone_set'Australia/Brisbane';但还是一样的问题,这不是我需要的。我需要它作为一个整数,这样我可以对照开放时间检查它。我想这可能会起作用$currentTimeQld->getTimeStamp;但它的返回时间仍然与阿德莱德时间相同。输出:1507506480 1507506480哦,很抱歉。我没有考虑这个要求。看到更新的答案:真棒这是一个处理$currentTime->getTimestamp-$currentTime->getOffset正是我需要的。谢谢你,老朋友。请在回答中链接到文档:
$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