如何设置Laravel Carbon时区的时间戳?

Yur*_*ray 10 laravel eloquent php-carbon

我有一个主要在CET地区的项目.我在config/app.php中设置了CET,但是base中的所有数据透视时间戳都以UTC时间存储?

如何设置时间戳的"全局"时区?

我做了这个测试:

<?php
$timezone = date_default_timezone_get();
echo "The current server timezone is: " . $timezone;
echo "<br />".date('m/d/Y h:i:s a', time());

$mytime = Carbon\Carbon::now();
echo "<br />".$mytime->toDateTimeString();
?>
Run Code Online (Sandbox Code Playgroud)

这是结果:

The current server timezone is: CET
06/09/2016 12:06:04 pm
2016-06-09 11:06:04
Run Code Online (Sandbox Code Playgroud)

tnx Y.

GON*_*ONG 17

您可以使用访问器实现它

public function getCreatedAtAttribute($value)
{
    return Carbon::createFromTimestamp(strtotime($value))
        ->timezone(Config::get('app.timezone'))
        ->toDateTimeString(); //remove this one if u want to return Carbon object
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个访问器而不是修改器,但尽管如此,我同意这里的最佳实践(特别是如果您的应用程序跨越时区或在受 DST 更改影响的时区中使用)是始终以 UTC 保存日期,并在日期为时更改时区。显示,而不是存储时显示。 (3认同)

the*_*len 14

Carbon使用默认的DateTime PHP对象,因此使用date_default_timezone_set()函数,例如: date_default_timezone_set('Europe/London');


Ash*_*arg 9

如果您使用的是 Laravel Carbon TimeStamps,则必须在App/Providers/AppServiceProvider.php文件中更改时区

// App/Providers/AppServiceProvider.php

public function boot()
{
    date_default_timezone_set('Asia/Calcutta');
}
Run Code Online (Sandbox Code Playgroud)


小智 8

在AppServiceProvider.php中,您可以添加php功能来更改整个项目的时间戳

public function boot()
{
    Schema::defaultStringLength(191);
    date_default_timezone_set('Asia/Aden');
}
Run Code Online (Sandbox Code Playgroud)

  • 在Laravel上,最佳做法是修改config / app.php文件中的timezone选项。 (2认同)

Ada*_*ery 5

更新档案 config/app.php

例如:'timezone' => 'Asia/Jerusalem'代替'timezone' => 'UTC'

  • 我认为这是最新 Laravel 的答案,对吗?`config('app.timezone')` 会影响 `Carbon` 时区,对吗?有人能证实吗? (2认同)
  • 如果您已经部署了应用程序,我不会推荐这样做。全局更改时间戳意味着它将开始使用更新的时间戳将时间戳保存在数据库中,这意味着数据库的某些行将使用旧时间戳保存,而其他行将使用新时间戳保存... (2认同)