【问题标题】:Laravel 5.3 - Carbon Date - UTC offset get timezone nameLaravel 5.3 - 碳日期 - UTC 偏移量获取时区名称
【发布时间】:2017-08-30 06:08:00
【问题描述】:

我正在尝试使用 Carbon 从 Laravel 5.3 中的 UTC 偏移量中获取时区名称。任何帮助下面列出的代码将不胜感激。

/* current code iteration */
$utcOffset = -5;
$timezone = Carbon::now($utcOffset)->timezone->getName();
echo $timezone;
// Result: -05:00
// Expected Result: EST

/* tried code */
$timezone = Carbon::now($utcOffset)->tzName;
// Result: -05:00

/* What I used prior to Carbon */
$timezone = timezone_name_from_abbr(null, $utcOffset * 3600, TRUE);
$dateTime = new DateTime();
$dateTime->setTimeZone(new DateTimeZone($timezone));
$timezone = $dateTime->format('T');'

我错过了什么?我觉得很蠢。。

【问题讨论】:

    标签: php laravel datetime php-carbon


    【解决方案1】:

    前言:

    接受的答案在大多数情况下都有效,但正如 timezone_name_from_abbr() 的用户贡献注释区域中所述,使用该函数存在问题,例如 returning false instead of actual timezone 并返回“历史”(即已弃用)时区标识符而不是给定位置的当前标准。至今仍然有效。

    此外,如果您查看 https://carbon.nesbot.com/docs/#api-timezone,只要您知道按照 Carbon 文档,原始代码会按预期返回值

    时区的原始名称(可以是区域名称或偏移字符串):

    这里还有一点需要注意的是,从偏移值导出时区被认为是不可靠的,因为它没有考虑到 DST 观察到的时间段偏移。

    所以,这一切实际上是说从偏移量导出时区并不总是可能的。

    答案:

    但由于 OP 提到了基于偏移量的 Carbon 和时区,因此根据 Carbon 文档截至目前,答案应该是

    $date = Carbon::now('-5');
    echo $date->tzName;
    

    【讨论】:

      【解决方案2】:

      在新的Carbon 中,它是timezoneName 属性;

      $now = Carbon::now(-5);
      echo $now->timezoneName;
      //or 
      echo $now->timezone->getName();
      

      【讨论】:

        【解决方案3】:

        尝试将 Carbon 更新为无效,最终使用旧的 datetime 类。

        $timezone = timezone_name_from_abbr(null, $utcOffset * 3600, TRUE);
        $dateTime = new DateTime();
        $dateTime->setTimeZone(new DateTimeZone($timezone));
        $timezone = $dateTime->format('T');
        

        【讨论】:

          【解决方案4】:

          这对我有用:

          $now = Carbon::now(-5);
          
          echo $now->timezone;
          // prints 'America/Chicago'
          

          【讨论】:

          • 基于git repo 是$now->tzName
          • 返回错误:DateTimeZone 类的对象无法转换为字符串。
          • ->tzName 怎么样?我发布了 tinker 的屏幕截图,它们都适用于我的安装。
          • ->tzName 返回-05:00的偏移量
          • 那我帮不了你了。根据文档->tzName 应该可以工作,根据我的测试它可以工作。那肯定还有其他的区别。如果它有帮助,我在 Laravel 5.3 和 carbon 版本 1.22.1 的项目上对其进行了测试。
          猜你喜欢
          • 2016-05-07
          • 2011-07-29
          • 2014-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-11
          • 2013-01-14
          • 2017-08-01
          相关资源
          最近更新 更多