PHP-MYSQL:将Unix时间戳转换为DateTime,反之亦然

收藏

即时通讯使用PHP 5.4.6和MySQL 5.5.29,我将UNIX TIMESTAMP转换为MYSQL DATETIME遇到了麻烦,反之亦然。 Mysql和php在同一台本地计算机上运行。

我有一个简单的mysql表

CREATE TABLE Entry(
id SERIAL PRIMARY KEY,
created DATETIME NOT NULL);

要插入数据,我使用php PDO和mysql NOW()。这工作正常,正确的日期时间存储在数据库中。

我的计划是在客户端使用Unix时间戳(服务器端使用php和mysql)。

因此,我想向我的客户提供unix时间戳。 因此,我使用MySql UNIX_TIMESTAMP()函数直接在查询中将其转换。

因此,示例查询如下所示:

SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry

结果: 创建= 2013-02-14 20:47:35 TS = 1360871255

因此,现在我想做另一种方法,我传递了一个UNIX时间戳,并想将其与数据库中的条目进行比较。不幸的是,我无法编写有效的PHP脚本。我不知道为什么,但是当我将相同的时间戳(1360871255)传递给PHP时,我无法通过此方法获得2013-02-14 20:47:35

public static function toDateTime($unixTimestamp){
    return date("Y-m-d H:m:s", $unixTimestamp);
}

当我调用toDateTime(1360871255)时,将返回2013-02-14 20:02:35,它不是原始的DateTime。

我知道,我不需要将1360871255格式化为Y-m-d H:m:s即可在MYSQL中使用它,但是1360871255似乎不是我期望的时间(并且MYSQL UNIX_TIMESTAMP已返回)。

我想做的是一个简单的查询,该查询向我显示比某个时间戳更旧的条目,如下所示:

SELECT * FROM Entry WHERE created < 1360871255

但正如我之前提到的,查询结果不是预期的,因为1360871255似乎不是正确的时间。

我没有为php中的mysql连接指定任何特殊的时区。

有什么建议么?

最佳答案

Your date format is wrong... i is for minute, not m (months).

return date("Y-m-d H:i:s", $unixTimestamp);

一些注意事项:

  • There's no need to re-assign, i.e. $unixTimestamp = $unixTimestamp;
  • Since you're using PHP > 5.3. you may be interested in the new DateTime object.