Laravel 5.3 - Carbon Date - UTC偏移获取时区名称

时间:2017-04-04 20:48:50

标签: php laravel datetime php-carbon

我正在尝试使用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');'

我错过了什么?我感到愚蠢..

4 个答案:

答案 0 :(得分:2)

这对我有用:

$now = Carbon::now(-5);

echo $now->timezone;
// prints 'America/Chicago'

答案 1 :(得分:1)

前言:

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

此外,只要您知道根据Carbon文档,只要您查看https://carbon.nesbot.com/docs/#api-timezone

,原始代码就会按预期返回值
  

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

这里要注意的另一件事是,由于不考虑DST观测到的周期偏移,因此认为从偏移值导出时区是不可靠的。

因此,这实际上是说从偏移量导出时区并非总是可能的。

答案:

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

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

答案 2 :(得分:0)

尝试使用旧的日期时间类更新Carbon以避免失败。

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

答案 3 :(得分:0)

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

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