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)
我的猜测和引导来自你所说的最好的方法是将时间保存为INT(1343247227)中的UTC,然后从那里生成你想要的任何时区.再假设你不需要在1970年的参考0点之前存储日期.
同样,为什么不在已知时区存储日期时间YYYY-MM-DD HH:MM:SS,然后转换为UTC或其他时区.这一切看起来都很混乱=(
正如@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中的列.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
3405 次 |
| 最近记录: |