Laravel 设置和获取 UTC 时间

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25758117/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 10:04:43  来源:igfitidea点击:

Laravel Setting and Fetching time in UTC

phpdatetimelaravellaravel-4

提问by Friend

I have set 'timezone' => 'UTC'in app.php ... our database stores datetime in UTC..We do not have access to database config... so we have to make changes from application end.. Currently its storing value just 2014-09-11 00:00:00what ever i select from calender..ideally iam trying to fix this

我已经'timezone' => 'UTC'在 app.php 中设置了...我们的数据库将日期时间存储在UTC..我们无权访问数据库配置...所以我们必须从应用程序端进行更改..目前它的存储值正是2014-09-11 00:00:00我从中选择的calender。 .理想情况下,我正在尝试解决此问题

when i insert date from singapore UTC+8it should store as

当我从singapore UTC+8它插入日期时应该存储为

'enterdate+8' 2014-09-11 08:00:00 in database.. 

similarly when i insert date from japan utc+9it should store

同样,当我从japan utc+9它插入日期时应该存储

'enterdate+9' 2014-09-11 09:00:00 in database

But when a user search 2014-09-11 08:00:00it should be converted to localtime ...something like 2014-09-11 00:00:00

但是当用户搜索时,2014-09-11 08:00:00它应该转换为本地时间......类似2014-09-11 00:00:00

anyways to fix this in laravel 4 ?

无论如何要在laravel 4中解决这个问题?

采纳答案by Jarek Tkaczyk

Use great Carbonthat you have in place:

使用Carbon你现有的伟大之处:

// for Eloquent
$dateFromDbInLocal = $model->created_at->tz('USER_TIMEZONE');

// for any timestamp
$dateFromDbInLocal = with(new Carbon\Carbon($timestampUTC))->tz('USER_TIMEZONE');

// other way around:
$dateInLocal = new Carbon\Carbon($timestampLocal, 'USER_TIMEZONE');
$dateInUtc = $dateInLocal->tz('utc');

Example:

例子:

$now = Carbon\Carbon::now(); // utc 2014-09-10 08:24:50

$japanUser = User::find($someId);
$japanUser->created_at->tz('Japan'); // 2014-09-10 17:24:50

You don't really need to convert anything upon saving, if your app is working in the same timezone as DB. Just do that in the presentation layer, so a user can read the date formatted to his timezone.

如果您的应用程序在与 DB 相同的时区中工作,则您实际上不需要在保存时转换任何内容。只需在表示层执行此操作,用户就可以读取格式化为他的时区的日期。