日期序列化后,Laravel 7中的时区错误

问题描述 投票:0回答:1

我正在开发新的Laravel 7.1应用(不进行升级)但是似乎使用日期序列化会松开时区。

config / app.php

'timezone' => 'Europe/Zurich',

修补匠示例

>>> \Carbon\Carbon::parse('2020-06-22')->timezone
=> Carbon\CarbonTimeZone {#3251
     timezone: Europe/Zurich (+01:00),
   }

Laravel 7 uses toJson()

>>> \Carbon\Carbon::parse('2020-06-22')->toJson()
=> "2020-06-21T22:00:00.000000Z"

所以,当我解析日期回溯时,我没有得到正确的日期。

>>> new \Carbon\Carbon('2020-06-21T22:00:00.000000Z')
=> Carbon\Carbon @1592776800 {#3266
     date: 2020-06-21 22:00:00.0 +00:00,
     timezone: "Z",
   }

>>> (new \Carbon\Carbon('2020-06-21T22:00:00.000000Z'))->format('Y-m-d')
=> "2020-06-21"

php php-carbon laravel-7
1个回答
0
投票

目前,我正在这样做

$date = Carbon::parse('2020-06-21T22:00:00.000000Z')
    ->setTimezone(config('app.timezone'));

作为替代,我可以更改模型中的默认日期格式,如doc中所述

/**
 * Prepare a date for array / JSON serialization.
 *
 * @param  \DateTimeInterface  $date
 * @return string
 */
protected function serializeDate(DateTimeInterface $date)
{
    return $date->toIso8601String(); // 2019-02-01T03:45:27+00:00
}

© www.soinside.com 2019 - 2024. All rights reserved.