【问题标题】:Carbon now time wrong碳现在时间错了
【发布时间】:2015-02-28 05:13:23
【问题描述】:

我刚开始使用 Carbon 扩展(到目前为止看起来很不错),但对 Carbon::now() 函数感到困惑。根据文档,这个函数似乎应该反映用户当前时区的当前时间,但是,我似乎得到的时间比格林威治标准时间早一个小时。

Carbon::now() 当我在 PST 时说 2015-01-01 17:26:46,实际上它目前是 2015-01-01 08:26:46

我是否必须为所有实例检测并输入用户本地时区?

什么给了? (我很可能对网站如何在本地获取用户存在根本性的误解)

【问题讨论】:

  • now() 实际上应该反映 server 时区。它对最终用户的时区一无所知。
  • 这很奇怪,因为我的服务器存储为我的当地时间。
  • 您是否编辑了config/app.php 上的timezone 选项?
  • time(); 给你什么?
  • 嘿,我刚刚检查了我的phpinfo(),时区错误。所以我会在我的 php.ini 文件中更改它,我相信它会解决这个问题。非常感谢您的帮助!

标签: php datetime laravel php-carbon


【解决方案1】:

对于其他想知道为什么(有时)Carbon::now() 结果与 new DateTime() 不同的人:

运行以下...

public function time()
{
    $date = Carbon::now();
    echo $date;
    echo "<BR>";

    return $date;
}

让我明白发生了什么。它打印:

2020-09-09 18:03:15
“2020-09-09T13:33:15.824992Z”

第一个是正确的,它的时区是在 config/app.timezone 中设置的。调用 new DateTime() 结果相同。第二个是laravel控制器的结果。它以 UTC 时区显示日期。这就是 laravel 转换它的方式(使用 Carbon 的 toJSON 方法)。 但是日期的时区是正确的并且正在运行:

$anotherDate = Carbon::parse('2020-09-09 18:30:00');
echo "diff_mins : " . $anotherDate->diff($date)->i;

显示:

diff_mins : 26

正如预期的那样。

【讨论】:

    【解决方案2】:

    在 config/app.php 中更改您的时区

     'timezone' => 'YOUR TIME ZONE',
    

    【讨论】:

      【解决方案3】:

      Carbon 基于 UTC,因此只需执行 Carbon::now() 将以 UTC 格式输出时间

      您必须指定时区才能准确反映您所在城市或地区的日期时间。

      有两种方法可以做到这一点。你可以这样做:

      Carbon::now('PST')Carbon::now('Continent/City') 例如 (Carbon::now('America/Montreal')

      【讨论】:

      • 根据文档,Carbon::now() 默认不是 UTC:$now = Carbon::now(); // will use timezone as set with date_default_timezone_set // PS: we recommend you to work with UTC as default timezone and only use // other timezones (such as the user timezone) on display
      【解决方案4】:

      这似乎是因为您服务器的时区与您自己的不同。

      这可能是由于:

      • 服务器配置错误
      • 服务器的物理位置位于不同的时区
      • 您的提供商的政策也可能导致此问题。如果您的提供商决定他们希望在他们在世界各地拥有的每台服务器上使用相同的时区,这将导致问题。

      如您所述,服务器的时区似乎是 CET(中欧时间),即 +1 GMT。

      要解决此问题,您应该change the timezone in your php.ini file(说明来自链接):

      1. 打开您的php.ini 文件
      2. 将以下代码行添加到 php.ini 文件的顶部:

      date.timezone = "美国/中部"

      或者,如果您希望 PHP 使用另一个时区,您应该将 US/Central 时区替换为所需的时区 as outlined here

      【讨论】:

      • 感谢我正在搜索亚洲/迪拜的时区链接
      猜你喜欢
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2017-05-20
      • 1970-01-01
      相关资源
      最近更新 更多