【问题标题】:Convert timezone into other timezone php将时区转换为其他时区php
【发布时间】:2016-12-28 10:06:53
【问题描述】:

除了说,我有一个时区“美国/博伊西”之外,我不知道如何问这个问题,我想使用 php 将其从“美国/博伊西”转换为更广泛的时区,例如“美国/山区”。我该怎么做?

【问题讨论】:

  • 我能从你的建议中得到的最好的结果是:Array ( [country_code] => US [latitude] => 43.61361 [longitude] => -116.2025 [cmets] => Mountain Time - South Idaho &俄勒冈州东部),我需要美国/山区
  • Mountain .......... America/Denver
  • 嗯?我知道上面写着“山地时间 - 爱达荷州南部和俄勒冈州东部”,我需要美国/山地,它确实会有所作为,如果不这样做,潜在的问题就会太多
  • get composer composer require nesbot/carbon carbon 解决了所有与时间相关的问题,is well documented

标签: php timezone


【解决方案1】:

如果不比较两个时区的所有复杂性,您就无法真正实现这一目标。它们确实是不同的条目:

  • US/MountainAmerica/Denver 的别名,实际首选后一种形式。它代表了美国大部分山区时区。

  • America/Boise 专门用于覆盖爱达荷州南部的一个地区,该地区在过去的几个时间点偏离了我们现在认为的“山地时间”。最后一次偏离是在 1974 年,当时 DST 于当年晚些时候在爱达荷州开始。您可以查看 the northamerica file in the tzdb sources 中的差异,或使用类似 timeanddate.com 的网站来比较 BoiseDenver

考虑到这些差异,您可以客观地将博伊西地区映射到山区时间的其他地区的唯一方法是确定一个最小阈值日期。在该日期之前的任何偏差都将被视为对区分这两个区域无关紧要。

然后,您只需要确定选择哪一个即可。根据具体情况,这似乎微不足道。但是,如果您考虑世界上所有的时区,有时您只是没有足够的信息来进行选择,并且需要某种决胜局数据,例如人口统计数据,或者只是一个偏好/排名顺序列表, 来决定使用哪个。

很抱歉不能提供简单的代码,但这不是一个简单的问题。如果您有兴趣,我有一些 .NET 代码的演示,这些代码实现了其中的一些工作,目的是构建一个时区选择器,以最大限度地减少条目数量。 live demo is herethe source code is here。抱歉,我没有 PHP 类似的东西,但你可以推断一下。

【讨论】:

    【解决方案2】:

    这对你有用吗?

    <?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
    

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 1970-01-01
      • 2021-10-16
      • 2021-03-15
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多