项目中主要2个时区设置:
app time_zone 处理app内时间相关函数处理
db time_zone 处理写入数据库的时间字符串的时区处理(带时区功能的字段类型如timestamp)
laravel中,使用含时间字段的model,写入的sql填充时间字段的值为'2021-06-28 21:40:19' ,跟app time_zone;
写入数据库的时候根据session的timezone+写入时间字符串内容保存至带时区属性的timestamp;
数据库查询时,数据库内timestamp按当前session的timezone获取时间值,即按不同时区写入timestamp后读取的结果是不同的时间字符串;
使用CURRENT_TIMESTAMP自动填充的mysql字段,为带时区的即使时间,mysql自行处理
查询:
使用DB::select后结果为'2021-06-28 21:40:19' 格式
使用Model::find后结果为'2021-06-28T19:40:19.000000Z' 格式 (参考修改https://learnku.com/docs/laravel/7.x/upgrade/7445#date-serialization)
时区设置参考
TIME_ZONE=Europe/Berlin
DB_TIMEZONE=Europe/Berlin