php timestamp utc

时间:2012-07-25 22:38:14

标签: php mysql datetime timestamp

我有一个PHP MySQL查询,它将一些数据插入MySQL数据库,它包含一个时间戳。

目前,INSERT查询使用NOW()作为时间戳列,并以下列格式保存在数据库中:2012-07-24 13:13:02

不幸的是,对我来说,服务器不在我的时区,它被列为America / Los_Angeles,显示为print date_default_timezone_get();

我希望做到以下几点:

date_default_timezone_set('Europe/London');
$timefordbLondonEU = date('Y-m-d H:i:s', time());

并简单地将$timefordbLondonEU代替NOW();

保存到数据库中

这是保存此类数据的好方法吗?

非常感谢,

理查德

[已添加文字]

我将MySQL数据库中的Type更改为DateTime并执行以下操作:

date_default_timezone_set('Europe/London');
$timefordbLondonEU = date('Y-m-d H:i:s', time()); 

它正在运作,但我还没有得到整体概念。

Assumptions based on your comments:
  1. MySQL =没有数据类型UTC,只需使用类型INT。
  2. Unix_TimeStamp()会保存当前时间还是计数?采用UTC格式,如1343247227.
  3. 由于UTC是普通0点的计数,因此您可以从中获取任何时区。假设你不想在1970年的参考0点之前有一个日期。
  4. 我的猜测和引导来自你所说的最好的方法是将时间保存为INT(1343247227),然后从那里生成你想要的任何时区。再假设您不需要在1970年的参考0点之前存储日期。

    同样为什么不在已知时区存储日期时间YYYY-MM-DD HH:MM:SS,然后转换为UTC或其他时区。这一切看起来都很混乱=(

1 个答案:

答案 0 :(得分:7)

正如@Petah在评论中所说,将你的时间存储在UTC中并根据需要将它们隐藏在应用程序中。

Unix时间戳以UTC为单位,因此我通常将时间存储在数据库中作为时间戳。这样可以省去第一次转换为UTC以进行插入时的头痛和困惑,然后在选择时从UTC中解除。

也就是说,将您的时间字段设为INT类型,并在插入时使用MySQL中的函数UNIX_TIMESTAMP(),或使用time()函数从PHP获取时间戳。

从数据库中获取时间戳时,它将以UTC格式显示,但是当您使用date()在PHP应用程序中显示时间戳时,它将显示在服务器时区中,或者您使用{{1}设置的任何内容}。

因此,以下两个查询将起作用:

date_default_timezone_set

如果要从数据库中选择INSERT INTO `table` (id, time) VALUES(NULL, UNIX_TIMESTAMP()); // or $time = time(); $query = "INSERT INTO `table` (id, time) VALUES(NULL, $time); ,可以执行以下操作:

DATETIME

生成的SELECT *, FROM_UNIXTIME(time) as dt FROM `table` WHERE 1 列格式为dt

您可以使用date()

格式化PHP中的数字时间戳

如果您拥有的PHP版本是64位,则不限于1970 - 2036年范围,PHP将支持64位时间戳,只需确保在MySQL中使用yyyy-MM-dd hh:mm:ss列即可情况下。

希望有所帮助。