对多个状态使用 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
既然知道了它们之间的区别,你就可以根据自己的需要来玩了。
好的,所以我在同一个 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
既然知道了它们之间的区别,你就可以根据自己的需要来玩了。