3

我在我的网站上发布了具有到期日期时间的帖子,我将它们存储在 Mysql 中

'Y-m-d H:i:s'

IE。2012-08-28 00:00:00

我将此日期时间转换为以下格式,该格式传递给 jquery 倒计时

$offset.', Y, n - 1, j, H, i, s'

这部分按应有的方式工作。

我想要做的是获取当前时间,并且只从数据库中获取未过期的帖子。让我绊倒的事情是所有帖子都有不同的时区。它们中的大多数在午夜到期,但在不同的时区,一些在东部午夜到期,而另一些在太平洋午夜到期。这些都存储为 2012-08-28 00:00:00 ,时区存储在数据库中作为 timezone.name 即。美国/东部。对于倒计时,$offset 是从这个值为 -4 的值创建的,因此倒计时的输入是

-4, 2012, 8 - 1, 28, 00, 00, 00 

哪个适用于我正在使用的 jquery 计数器,但在尝试将当前日期与 mysql 日期条目进行比较时它不起作用。我已经尝试在获取 mysql 日期时间条目并为东部存储这样的值之前设置时区

2012-08-27 20:00:00 

当我尝试设置当前时间并使用我的 America/Phoenix 时区时,我得到的值是晚上 9 点,东部的帖子应该到期时我得到

2012-08-28 21:00:00 

这对我来说意味着帖子会提前一个小时过期。这是我被卡住了,我愿意将数据存储在多个数据库条目中以用于倒计时和一个用于过期数据库检查,我只是不知道实现我需要的最佳方法是什么。任何帮助表示赞赏。谢谢。

4

2 回答 2

1

我个人会将所有过期时间转换为 UTC(或其他一些定义的时区 - 如果它们相同,则可能是您的数据库服务器和应用程序服务器的时区),然后再将它们输入数据库表,然后根据时区查询该表特定的用户。例如,WHERE 子句可能看起来像

WHERE expiration_datetime > NOW() + INTERVAL X HOUR

其中 X 是您为用户的时区应用小时差的位置。

于 2012-08-28T16:31:19.630 回答
0

如果您允许帖子时间戳未被规范化,那么您的数据库设计错误。只要所有时间戳都在同一个时区,我与用户所在的时区无关,没什么大不了的。因此,您的问题的答案是 - 修复您的设计,将所有时间戳保持在同一时区(为简单起见,GMT)。

于 2012-08-28T16:28:27.437 回答