Carbon::now() 没有使用 UTC

Posted

技术标签:

【中文标题】Carbon::now() 没有使用 UTC【英文标题】:Carbon::now() is not using UTC 【发布时间】:2017-04-08 23:40:10 【问题描述】:

我来自菲律宾。如果我将使用 Carbon::now(),它会捕获我的机器时间而不是 UTC 时间。

我的 config/app.php 是:

    'timezone' => 'UTC',

这是我的代码:

$log->dateRequest = Carbon::now();

如果我会在晚上 9:00(菲律宾时间)发布请求。它捕获 21:00:00 ,而不是 13:00:00 (来自 UTC)。

【问题讨论】:

【参考方案1】:

在您提到的一个问题中,您需要在应用中使用多个时区。因此,您可以动态添加时区:

Carbon::now('UTC')

或者在现有日期使用setTimezone('UTC') 方法。

【讨论】:

【参考方案2】:

如Carbon docs instantiation 所述,试试这个:

$log->dateRequest = Carbon::now('UTC');

【讨论】:

我在上午 12:21(菲律宾时间)尝试过,但我在 2016-11-25 00:21:23 得到了这个。如果换算成 UTC,应该是 16:21:00。【参考方案3】:

Carbon 使用默认的 DateTime PHP 对象。

获取默认时区:

date_default_timezone_get();
// or
Carbon::now()->timezoneName;

设置默认时区

date_default_timezone_set('UTC');

var_dump(Carbon::now()->utc); // true;

【讨论】:

【参考方案4】:

你可以试试这个

$log->dateRequest = Carbon::now('GMT+8'),

【讨论】:

【参考方案5】:

试试这个

date_default_timezone_set('Asia/Manila');
$date = Carbon::createFromFormat('F j, Y g:i:a', date('F j, Y g:i:a'));

dd($date->format('F j, Y g:i:a')); //  November 27, 2020 11:53:pm

【讨论】:

【参考方案6】:

你也可以试试这个:

\Carbon\Carbon::now()->timezone('Asia/Manila')

【讨论】:

以上是关于Carbon::now() 没有使用 UTC的主要内容,如果未能解决你的问题,请参考以下文章

Carbon::now() - 只有一个月

Laravel Carbon 简明使用

比较 Laravel 框架中的碳日期 [重复]

PHP Carbon 类改变了我原来的变量值

如何使用 Carbon 获取上个月的第一天和最后一天 - Laravel

碳 - 检查一个月去,一个星期去等