首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当W3c转换为DateTimeString时,Carbon不采用PHP时区

当W3c转换为DateTimeString时,Carbon不采用PHP时区
EN

Stack Overflow用户
提问于 2018-09-05 06:21:07
回答 1查看 443关注 0票数 0

当使用parse()解析ISO-8601datetime时,Carbon在使用toDateTimeString()时不读取PHP时区(例如,对于MySQL )。检查下一个代码:

代码语言:javascript
复制
$date_with_tz = '2018-09-04T19:12:34-04:00';
echo Carbon::parse($date_with_tz)->toW3cString().PHP_EOL;
echo Carbon::parse($date_with_tz)->toDateTimeString().PHP_EOL;
$date_with_tz = '2018-09-04T19:12:34-03:00';
echo Carbon::parse($date_with_tz)->toW3cString().PHP_EOL;
echo Carbon::parse($date_with_tz)->toDateTimeString().PHP_EOL;

php.date_timezone='America/Argentina/Mendoza'

转储

代码语言:javascript
复制
// 2018-09-04T19:12:34-04:00
// 2018-09-04 19:12:34
// 2018-09-04T19:12:34-03:00
// 2018-09-04 19:12:34         <-- Wrong

期望的

代码语言:javascript
复制
// 2018-09-04T19:12:34-04:00
// 2018-09-04 19:12:34
// 2018-09-04T19:12:34-03:00
// 2018-09-04 20:12:34         <-- OK (expected)
EN

回答 1

Stack Overflow用户

发布于 2018-09-05 07:50:30

我不确定您认为date_default_timezone_set应该在这里做什么,但它不会更改DateTime或Carbon实例的时区,如果没有提供,它将只是默认时区。

代码语言:javascript
复制
date_default_timezone_set('UTC');

// -03:00 (provided via offset in date format)
$dateWithOffset = Carbon::parse('2018-09-04T19:12:34-03:00'); // -03:00

// -04:00 (provided via timezone parameter)
$dateWithTZ = Carbon::parse('2018-09-04T19:12:34', 'America/New_York');

// 00:00 (this is the only one affected by the default setting since no offset or timezone was provided)
$dateWithoutOffset = Carbon::parse('2018-09-04T19:12:34');

如果使用format或toDateTimeString方法,这3个实例将输出相同的数字。两者都不会在输出时更改时区。

如果您想输出一个UTC时间戳,请在输出之前使用setTimezone方法转换其他实例的时区。

代码语言:javascript
复制
$dateWithOffset->setTimezone('UTC')->toDateTimeString()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52174691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档