php timestamp utc


php timestamp utc

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

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

不幸的是,服务器不在我的时区,它被列为America/Loss_Angeles,如print date_default_timezone_get(); 所示

我希望做以下事情:

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

并简单地将CCD_ 5代替CCD_;

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

非常感谢,

Richard

[添加文本]

我将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点之前

根据我的猜测和你所说的,最好的方法是将时间保存为INT中的UTC(1343247227),然后从中生成你想要的任何时区。再次假设您不需要存储1970年参考0点之前的日期。

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

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

Unix时间戳是UTC,所以我通常将时间作为时间戳存储在数据库中。这省去了先转换为UTC插入,然后在选择时从UTC转换的麻烦和混乱。

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

当你从数据库中获取时间戳时,它将以UTC为单位,但当你使用date()在PHP应用程序中显示它时,它会显示在服务器时区,或者你用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列将采用yyyy-MM-dd hh:mm:ss格式。

您可以使用date() 在PHP中格式化数字时间戳

如果你的PHP版本是64位的,你不局限于1970-2036的范围,PHP将支持64位的时间戳,在这种情况下,只需确保在MySQL中使用BIGINT列。

希望能有所帮助。