我不知道如何问这个问题,除了说,我有一个时区" America / Boise"我想使用php将其转换为" America / Boise"获得更广泛的时区,例如" US / Mountain"。我该怎么做?
答案 0 :(得分:1)
如果不比较两个时区中每个时区的所有错综复杂,你就无法实现这一目标。它们确实是不同的条目:
US/Mountain
是America/Denver
的别名,后一种形式实际上是首选。它代表了美国大部分山区时区。
America/Boise
专门用于覆盖爱达荷州南部的一个地区,该地区偏离了我们现在认为的“山地时间”#34;在过去的几个点。最后一次偏离发生在1974年,当时DST在爱达荷州晚些时候开始。您可以在the northamerica
file in the tzdb sources中查看差异,或使用timeanddate.com等网站来比较Boise和Denver。
考虑到差异,您可以客观地将博伊西地区映射到其他山区时间的唯一方法是,如果您决定了最小阈值日期。在该日期之前的任何偏差都被认为无法区分这两个区域。
然后你就有了解决哪个选择的问题。根据具体情况,这似乎微不足道。但是,如果你考虑世界上所有的时区,有时你只是没有足够的信息来选择,并且需要有某种决胜局数据,例如人口统计数据,或者只是偏好/等级 - 订单清单,决定使用哪个。
很抱歉无法提供简单的代码,但这不是一个简单的问题。如果您有兴趣,我已经获得了一些.NET代码的演示,这些代码实现了一些这样的工作,目的是构建一个时区选择器,最大限度地减少条目数。 live demo is here和the source code is here。对不起,我没有类似的PHP,但你可以推断。
答案 1 :(得分:0)
这对你有用吗。
<?php
$date = new DateTime('2016-08-22 12:00:00', new DateTimeZone('America/Boise'));
echo $date->format('m/d/Y H:i:s').PHP_EOL;
$date->setTimezone(new DateTimeZone('MST'));
echo $date->format('m/d/Y H:i:s').PHP_EOL;
结果:
08/22/2016 12:00:00
08/22/2016 11:00:00