PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-“ date_part(‘epoch’,now()at time zone’UTC’)“与在PostgreSQL中的” now()at time zone’UTC’“不同的时间大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在将基于Web的前端编写到数据库(@L_607_1@ / POSTGResql)中,我需要在其中存储各种日期/时间.该时间应始终在本地时间在客户端输入,并也在本地时间显示.出于存储目的,我将所有日期/时间存储为整数(UNIX时间戳)并标准化为UTC.@L_772_4@特定的字段有@L_772_4@限制,即将来不允许填写时间戳,因此我尝试了数据库约束…

CONSTRAint not_future 
    checK (timestamp-300 <= date_part('epoch', Now() at time zone 'UTC'))

如果浏览器和服务器之间的时间稍微不同步,则-300将有5分钟的余地.
问题是,提交当前时间时,此约束始终失败.我已经完成测试,发现以下内容.

POSTGResql客户端中:

SELECT Now()-返回正确的本地时间

SELECT date_part(‘epoch’,Now())-返回UTC的unix时间戳(通过将值输入到PHP中的date函数中以对其对我的时区的补偿进行校正来进行测试)

SELECT date_part(‘epoch’,Now()at time zone’UTC’)-返回以两个时区向西偏移的unix时间戳,例如我在格林尼治标准时间2,得到GMT-2时间戳.

我已经清楚地知道,删除“在时区’UTC’”会解决我的问题,但是我的问题是,“ epoch”是否旨在返回AFAIK始终位于UTC的unix时间戳,为什么? UTC中已经存在的“时代”会被纠正吗?这是@L_772_4@错误,还是我在这里缺少有关已定义/正常行为的信息.

解决方法:

“时区’UTC’的Now()”值是您当前的时间,该时间已移至UTC,然后转换为TIMESTAMP WITHOUT TIME ZONE.

因此,您给“ date_part”@L_772_4@没有时区的timestAMP(换句话说,未知时区),并期望在已知时区收到它与固定时间戳之间的秒差(“ EPOCH”,1970-01-01 00: 00:00 UTC).

POSTGRes需要timestAMP WITH TIME ZONE进行计算.因此,它将您的值转换为时区’UTC’assuming it’s at your time zone并计算差值.

就像是:

SELEct ((Now() at time zone 'UTC') at time zone '<your_time_zone>') at time zone 'UTC';

大佬总结

以上是大佬教程为你收集整理的php-“ date_part(‘epoch’,now()at time zone’UTC’)“与在PostgreSQL中的” now()at time zone’UTC’“不同的时间全部内容,希望文章能够帮你解决php-“ date_part(‘epoch’,now()at time zone’UTC’)“与在PostgreSQL中的” now()at time zone’UTC’“不同的时间所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: