日期时间倒计时和过期


DateTime countdown and expiration

我的网站上有一个过期日期的帖子,我将这些帖子作为存储在Mysql中

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

即。2012-08-28 00:00:00

我将这个日期时间转换为下面的格式,并将其传递给jquery倒计时

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

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

我想做的是获取当前时间,只从数据库中获取未过期的帖子。让我感到困惑的是,所有的帖子都有不同的时区。其中大多数在午夜到期,但在不同的时区,有些在东部午夜到期,而另一些在太平洋午夜到期。这些都存储为2012-08-28 00:00:00,数据库中存储的时区为时区名称,即美洲/东部。对于倒计时,$offset是从这个值-4创建的,因此倒计时的输入是

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

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

2012-08-27 20:00:00 

当我尝试设置当前时间并使用我的美国/凤凰城时区时,我得到的值是晚上9点,此时东部邮政应该到期,我得到

2012-08-28 21:00:00 

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

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

WHERE expiration_datetime > NOW() + INTERVAL X HOUR

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

如果允许不规范posts时间戳,则数据库设计错误。我不在乎用户在哪个时区,只要所有的时间戳都在同一时区,就没什么大不了的。所以,你的问题的答案是——修正你的设计,将所有时间戳保持在同一时区(为了简单起见,是GMT)。