Laravel 碳don';W3c转换为DateTimeString时,不要使用PHP时区

Laravel 碳don';W3c转换为DateTimeString时,不要使用PHP时区,laravel,php-carbon,Laravel,Php Carbon,当使用parse()解析ISO-8601日期时间时,当使用toDateTimeString()时,不读取PHP时区(例如,对于MySQL)。检查下一个代码: $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;

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

$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'](-03:00)

倾倒

//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我不确定您认为date\u default\u timezone\u set应该在这里做什么,但它不会改变DateTime或Carbon实例的时区,如果没有提供,它只是默认值

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方法在输出前转换其他实例的时区

$dateWithOffset->setTimezone('UTC')->toDateTimeString()

“W3CDateTime”不是一个东西,我想你是说。谢谢。。。更新后:)我以碳法的名义提出:P@pablorsk,您是否尝试过使用Carbon方法steTimeZone或shiftTimeZone?我可以做
Carbon::parse($date_with_tz)->setTimezone('UTC')->toDateTimeString()
但是,如何为Laravel配置此方法?例如,在API上,用户可以在不同的时区发送datetime…耶!您可以执行以下操作:
Carbon::parse($date_with_tz)->setTimezone('UTC')->toDateTimeString()
,并且始终获得相同的UTC日期时间。但是,我怎么能为所有的拉威尔项目设定这个?我不知道你的意思是什么?设定什么?如果需要,编写一个helper函数,但toDateTimeString不进行任何转换。
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');
$dateWithOffset->setTimezone('UTC')->toDateTimeString()