2011-05-20 17 views
1

我从数据库中检索一个unix时间戳,我想检查这个日期时间是否已经通过。PHP到目前为止Unix的时间戳

我试着用if语句来比较time(),但它总是说时间已经过去了。

我在做什么错?

编辑:只是一些更多的信息.​​.确定上午/下午我添加12小时,如果它的PM之前运行它通过mktime()。 (这是正确的吗?)

它存储在数据库中作为int而不是任何日期时间类型。

+0

尝试打印数据库和PHP时间戳,以便直观地查看数据库是在添加微秒还是不使用GMT。其次确保数据库和PHP应用程序服务器都在相同的日期时间,并且它们的内部日期时间相互间为1秒。 – David 2011-05-20 19:18:02

+0

我会尝试打印和比较我的自我。数据库中的时间戳由php的mktime()生成,并作为“int”存储在数据库中,所以我认为它不会增加微秒。向OP添加了更多信息。 – 2011-05-20 19:46:28

回答

1

您的PHP时间可能受PHP时区影响。使用date_default_timezone_get()来找出你所在的时区。

+0

嗯,它运行在本地服务器上,我正在访问服务器上的站点,所以我怀疑时区不同,因为我只使用一台计算机。向OP添加了更多信息。 – 2011-05-20 19:44:03

0

确保DB和PHP中的时区相同,使用NOW()函数用当前时间戳填充DB列(该列应该是日期时间类型),那么您可以使用UNIX_TIMESTAMP() MySQL函数获得时间戳,该函数与PHP的time()相比很好。

或者,您可以填写的东西在数据库列像

mysql_query("INSERT INTO your_table (your_date) VALUES (FROM_UNIXTIME(" . time() . "))") 

应该与时区的差异甚至工作。

0

如果您使用mktime创建UNIX时间戳,PHP将使用时区设置来解释您给定参数的含义。有可能你应该使用gmmktime。这取决于如何创建数据库中的时间戳;我不能确定没有看到更多的代码和更详细的解释。

我通常更喜欢将所有日期存储为UTC(GMT)时区中的DATETIME类型。它往往不那么容易混淆。

只是一些更多的信息.​​.确定上午/下午如果它的PM之前通过mktime()运行它,我加12小时。 (这是正确的?)

  • 12点是小时12
  • 下午1点是13

所以你不要总是加12(即中午12点时例外)。