Laravel-timestamp()和timestampTz()有什么区别?

时间:2018-10-12 07:06:13

标签: laravel

Laravel的Schema Builder中的timestamps()和timestampsTz()方法之间有什么区别?我尝试搜索Google,但找不到任何帮助。

2 个答案:

答案 0 :(得分:3)

基本上timestampsTz()代表Timestamp with Timezone,而timestamps()就像Timestamp without timezone

TimestampsTz()是特定时间点的表示。该时间的调整是根据与系统相关的时区进行的。

常规timestamps()更像常规时钟。

看看这个例子:

如果您使用的是timestamps()函数,那么您还将存储环境所选择的时区。如果您使用的是timestampsTz(),则将无法确保时区安全。

  

注意:每次使用timestampsTz()存储的时间都存储在UTC(世界标准时间)中。

我想当您确定所有数据都在同一区域内时,或者在该区域上有另一层可以处理时间转换时,最好使用timestamp without timezone

我在StackExchange上找到了一个很好的例子,我将在这里引用:

  

例如,假设您正在2013-06-15(尚未在DST中)安排某个事件在2013-01-15 10:00(该时间已经在DST中)发生,并且在2013-06-15,您所在的地区被指定采用夏令时;但是,此后的某个时间,政府更改了规则,并说您所在的地区将不再使用DST,您的计划时间突然变为2013-01-15 11:00(而不是10:00),即如果您使用时间戳记WITH时区,并保持TZ配置为最新。当然,如果您跟踪自己感兴趣的地区/时区中的规则更改并更新受影响的记录,那么您可能还会注意到也可以使用时区来处理此类情况。

更新

在数据库中,普通timestamps()看起来像

2004-10-19 10:23:54

timestampsTz()看起来像

2004-10-19 10:23:54+02

更新2:

Laravel中的这些函数可用于每种类型的数据库。但这仅适用于PostgreSQL。看一下文档:PostgreSQL Timestamp。在其他数据库中,时区信息会自动包含在时间戳中。

在所有其他数据库中,这将具有相同的输出。

答案 1 :(得分:0)

timestampsTz() =添加可为空的created_at和Updated_at TIMESTAMP(带有时区)的等效列。

timestamps() =添加可空的created_at和updated_at TIMESTAMP等效列。

区别在于timestampsTz()添加了一个时区。