gpt4 book ai didi

mysql - 时间戳的时区在数据库和/或 Laravel 中如何工作

转载 作者:行者123 更新时间:2023-11-29 09:31:25 26 4
gpt4 key购买 nike

我有一个关于时间戳时区的问题。

app.php 中的时区是如何使用的?我意识到,如果我使用 Carbon 创建时间戳或从数据库查询值(时间戳),行为会有所不同。

注意:我的MySQL使用系统时区是GMT+8或Asia/Kuala_Lumpur。

  1. 示例#1
    • 在 app.php 中设置 timezone="UTC"
    • 创建一个 Carbon 实例
>>> new Carbon\Carbon;
=> Carbon\Carbon @1572404830 {#3496
date: 2019-10-30 03:07:10.625282 UTC (+00:00),
}
>>>
  • 示例 #2
    • 在 app.php 中设置 timezone="Asia/Kuala_Lumpur"
    • 创建一个 Carbon 实例
  • >>> new Carbon\Carbon;
    => Carbon\Carbon @1572404816 {#3520
    date: 2019-10-30 11:06:56.316851 Asia/Kuala_Lumpur (+08:00),
    }

    例如#1和#2,这是我的预期。根据时区,您会获得不同的值。当我们从数据库查询时间戳时,事情变得有点奇怪(至少对我来说)。

  • 示例#3
    • 在 app.php 中设置 timezone="UTC"
    • 从数据库查询
  • >>> RefCyberCity::whereDataSource('ccms')->take(1)->first()->updated_at
    => Illuminate\Support\Carbon @1572083605 {#3531
    date: 2019-10-26 09:53:25.0 UTC (+00:00),
    }
  • 示例#4
    • 在 app.php 中设置 timezone="Asia/Kuala_Lumpur"
    • 从数据库查询
  • >>> RefCyberCity::whereDataSource('ccms')->take(1)->first()->updated_at
    [!] Aliasing 'RefCyberCity' to 'App\RefCyberCity' for this Tinker session.
    => Illuminate\Support\Carbon @1572054805 {#3491
    date: 2019-10-26 09:53:25.0 Asia/Kuala_Lumpur (+08:00),
    }

    我们可以看到两者都输出 2019-10-26 09:53:25.0 但时区不同。

    最佳答案

    来自数据库的日期实际上是一个字符串,尽管 MySQL 有自己的时区信息,但它不会反射(reflect)在没有时区的日期字符串中。

    Laravel DB 驱动程序假设它被写入应用程序配置中设置的时区。如果您要在项目中更改时区,这会丢失您的所有日期。

    我个人对时区的建议是在应用程序和服务器上将所有内容保留为 UTC,然后根据用户的偏好仅在最后可能的时刻(例如在 View 中)更改时区。这还允许您输出 UTC 时间戳并让 JavaScript 将其更新为用户的区域设置。时区非常困难,如果您所在的国家/地区实行夏令时,时区会变得更加困惑,例如欧洲/伦敦会根据年份更改时区。

    关于mysql - 时间戳的时区在数据库和/或 Laravel 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618411/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com