当前位置: 首页 > 知识库问答 >
问题:

Laravel timestampTz列的时区错误

金伟
2023-03-14

我正在使用Postgres 13和Laravel 8.4.4

为定义为强制转换到日期时间的雄辩模型属性设置Unix时间戳1607207809,我们得到正确的Carbon时间,2020-12-05 22:36:49.0 00:00

但是,保存此模型实例(其中该列在迁移中定义为timestampTz列)会导致保存2020-12-05 22:36:49-08。这不是正确的时区,导致不正确的时间。

config/app.php中,时区设置为UTC。我的电脑的时区是太平洋时间,所以它似乎以某种方式优先。你知道为什么吗?

我本以为时间戳是用碳编码的时区保存的,但显然不是?

共有2个答案

邢高澹
2023-03-14

通过使用date\u default\u timezone\u set功能设置时区,您可以设置整个laravel应用程序使用的时区。

AppServiceProvider中添加此代码

public function boot(){
     date_default_timezone_set('Pacific/xxxxxx');
}

在这里检查您的时区名称太平洋区。

钱朝明
2023-03-14

我找到的最佳解决方案是在模型上定义$dateFormat='Y-m-dh:I:sp',同时强制转换为datetime。

定制的演员阵容(https://laravel.com/docs/8.x/eloquent-mutators#custom-不应使用强制转换),因为在创建新对象时,尚未设置在处创建的和在处更新的属性。

在不定义$dateFormat的情况下,传递给在处创建的和在处更新的的Cast类设置器的$value参数的格式为“Y-m-d H:i:s”。

如果您的数据库服务器设置为与应用相同的时区,但会发生错误,这不是问题。

 类似资料:
  • 我正在开发一款新的Laravel7.1应用程序(不是升级版),但使用日期序列化似乎会影响时区。 config/app.php 修补程序示例 Laravel7使用toJson() 因此,当我分析回日期时,我没有得到正确的日期。 现在我是这样做的 作为替代,我可以更改我的模型中的默认日期格式,如文档中所述 但是我想,和/或默认使用我的时区是更好的-

  • 问题内容: 我一直在尝试隔离应用程序中的错误。我成功产生了以下“谜语”: 在Android API 7上 运行此代码时,我得到了注释中的值(是的,是的)。此行为取决于特定的Java实现。 我的问题是: 为什么s1不等于s2? 更重要的是, 为什么s1不正确? 虽然指向适当的时间点,但没有。Android的SimpleDateFormat实现中似乎存在一个错误。 问题1 的答案 : 请参阅Balus

  • 我正在运行spark作业以加载到Oracle。但我得到以下错误。 ORA-01882:未找到时区区域 这是我代码中的内容 相同的代码适用于Spark-Shell,但不适用于Spark-Shell。相同的火花提交在其他集群上工作。感谢你的帮助!

  • 我正在编写一个应用程序,使用JPA和GlassFish 3.1.2.2和EclipseLink 2.3.2。我正在使用Oracle DB 11g,并尝试使用TIMESTAMPTZ字段类型存储带有时区的日期和时间。 通过我的设置,我可以将带有时区的日期和时间保存到数据库中。(更新-实际上,当查看实际的SQL调用时,它只传递日期和时间。Oracle在保存到DB时必须附加时区)。 但是,在检索回数据时,

  • 我正在使用转换到新时区UTC+3,这等于EAT时区,但Postgres(9.1)显示错误的时间 (默认时区为斯德哥尔摩) 如果将JodaTime与两个时区一起使用,则显示相同的正确结果“2015-01-13 10:40:00”。

  • 返回我女巫是错误的。 但接下来的查询如下: 我看对日期