通过将其时间戳转换为unix时间从mysql获取数据

时间:2011-05-28 15:05:29

标签: php mysql

这将通过PHP完成。

我基本上想要获得30分钟前插入的行数。

我的表上有一个时间字段,类型为TIMESTAMP,在更新时它设置为CURRENT_TIMESTAMP。

日期以以下格式存储:

2011-05-27 04:29:17

我的查询应该看起来像这样,但我不能这样做

SELECT COUNT(*) FROM mytable WHERE UNIX_TIMESTAMP(time) < '.time().'-1800

其中time()是PHP获取UNIX时间的函数。

基本上应该做的是打印从现在到30分钟前插入的行数,但我似乎无法使其正常工作。

有人可以帮忙吗?

小编辑: 我看到的另一个问题是php的函数time()显示unix时间,即UTC。存储在mysql中的时间可能是GMT,即计算机的时间/时区设置为。

2 个答案:

答案 0 :(得分:1)

通过简单地使用:

,您可以轻松地将现在存储的行存储到30 mins之前
SELECT count(*) FROM mytable WHERE `time` >= DATE_SUB(UTC_TIMESTAMP, INTERVAL 30 minute)

如果您将日期/时间数据存储为UTC_TIMESTAMP,则UTC_TIMESTAMP()的使用只是一个示例,如果需要,您可以使用NOW(),具体取决于您要存储的内容真。

<强> **编辑** 删除了坏指针并修复了示例:)

答案 1 :(得分:0)

  1. 您真的需要计算机的时区与UTC不同吗?为什么不把它设置为UTC&amp;拯救自己的困惑?如果这不起作用,只需在mysql上使用dateadd()在检查时将mysql时间戳转换为UTC?

  2. 我的建议是编写一个小函数将mysql时间戳转换为PHP时间戳格式&amp;将它加载到mysql中。然后,您需要做的就是在查询中调用tmstamp(time_stamp)而不是time_stamp。您也可以反过来,即将PHP的“30分钟前”时间戳转换为mysql格式并重新运行查询(可能更容易)。

  3. 通常它只是一个格式化问题。它不是跨程序标准化的。