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

soc*_*qwe 24 php mysql datetime unix-timestamp

即时通讯使用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);
Run Code Online (Sandbox Code Playgroud)

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

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

所以我想向我的客户提供unix时间戳.因此我使用MySql UNIX_TIMESTAMP()函数直接在查询中进行转换.

所以示例查询如下所示:

SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry
Run Code Online (Sandbox Code Playgroud)

结果:created = 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);
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给DateTime(1360871255)时会返回2013-02-14 20:02:35这不是原来的DateTime.

我知道,我不需要将1360871255格式化为Ymd H:m:s以在MYSQL中使用它,但1360871255似乎不是我预期的时间(并且MYSQL UNIX_TIMESTAMP已经返回).

我想要做的是一个简单的查询,向我显示比某个时间戳更早的条目,这样的简单:

SELECT * FROM Entry WHERE created < 1360871255
Run Code Online (Sandbox Code Playgroud)

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

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

有什么建议?

Jas*_*ary 42

您的日期格式错误... i是分钟,而不是m(月).

return date("Y-m-d H:i:s", $unixTimestamp);
Run Code Online (Sandbox Code Playgroud)

一些附注:

  • 没有必要重新分配,即 $unixTimestamp = $unixTimestamp;
  • 因为您使用的是PHP> 5.3.您可能对新的DateTime对象感兴趣.

  • @sockeqwe - 你不是傻瓜.你只是看了一眼.它发生了. (3认同)