php timestamp utc

Dev*_*ode 3 php mysql datetime timestamp

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

目前,INSERT查询NOW()用于timestamp列,并以下列格式保存在数据库中: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());
Run Code Online (Sandbox Code Playgroud)

并简单地保存到数据库$timefordbLondonEU中代替NOW();

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

非常感谢,

理查德

[添加文字]

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

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

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

Assumptions based on your comments:
Run Code Online (Sandbox Code Playgroud)
  1. MySQL =没有数据类型UTC,您只需使用类型INT.
  2. Unix_TimeStamp()会保存当前时间还是计数?以UTC格式,如1343247227.
  3. 由于UTC是普通0点的计数,因此您可以从中获取任何时区.假设您不希望在1970年的参考0点之前有一个日期.

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

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

dre*_*010 7

正如@Petah在评论中所说,将您的时间存储在UTC中并根据需要将它们转换为应用程序.

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

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

从数据库中获取时间戳时,它将以UTC格式显示,但是当您在PHP应用程序中使用时date(),它将显示在服务器时区或您设置的任何内容中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);
Run Code Online (Sandbox Code Playgroud)

如果要从DB中选择它DATETIME,可以执行以下操作:

SELECT *, FROM_UNIXTIME(time) as dt FROM `table` WHERE 1
Run Code Online (Sandbox Code Playgroud)

生成的dt列将采用该格式yyyy-MM-dd hh:mm:ss.

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

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

希望有所帮助.