2013-07-08 55 views
1

好吧,我在PHP中使用Y-m-d H:i:s格式的日期时间字符串。对于exampe:将PHP中的日期时间字符串保存到MySQL中

'2013-07-01 00:04:37' 

另外我有一个时区的字符串,如:

'-05:00' 

我想这两个字符串转换成整数(UNIX时间),然后保存它在一个MySQL数据库。你会怎么做?

我知道,给一个字符串就可以得到UNIX时间在PHP如下:

date_create('2013-07-01 00:04:37')->getTimestamp(); 

然而,这样它占了正确的时区你会如何调整呢?另外你如何在PHP中存储MySQL中的unix时间戳?

+1

你有没有考虑过'CONVERT_TZ()'mysql函数? – Robert

回答

2

您可以使用MySQL功能CONVERT_TZ()

CONVERT_TZ(dt,from_tz,to_tz)

CONVERT_TZ()将日期时间值dt从from_tz给出的时区转换为to_tz给出的时区,并返回结果值。

例子:

SELECT CONVERT_TZ('2013-07-01 00:04:37','+00:00','-05:00');

此输出2013-06-30 19:04:37您可以在INSERT语句使用此功能。

+0

你能给我一个'INSERT'语句的例子吗?另外存储日期的列应该属于哪个域? –

+0

INSERT INTO T1(id,date)VALUES(NULL,CONVERT_TZ('2013-07-01 00:04:37','+ 00:00',' - 05:00'));'我没有undertsand你的问题的其他部分。 – Robert

+0

谢谢。另一部分只是意味着“我应该将日期时间存储为DATETIME值还是TIMESTAMP值?”据我所知,在存储之前,TIMESTAMP值将从系统时区转换为UTC,反之亦然。你将如何在这种情况下正确存储时间戳。我正在考虑按照INSERT INTO T1(id,date)VALUES(NULL,CONVERT_TZ('2013-07-01 00:04:37','-05:00',(SELECT @@ global.time_zone) ));'。 –

0

您可以添加时区)

喜欢的东西:

date_create('2013-07-01T00:04:37-05:00')->getTimestamp(); 

正如你可以在文档中看到:http://es1.php.net/manual/en/datetime.construct.php

+0

太棒了。你如何将这个时间戳存储到MySQL数据库? –

+0

'$ timestamp = date_create('2013-07-01T00:04:37-05:00') - > getTimestamp();' And ... 'INSERT INTO table VALUES time ='$ timestamp''与您的PDO/Mysqli延伸... 你从来没有这样做? :O选中此项:[link](http://php.net/manual/en/mysqli.query。php) 你可以设置字段为mysql中的时间戳;) – Eleazan

0

将时间和日期转换为Unix时间戳时,会将其转换为一个整数,该整数表示1970年1月1日00:00 UTC以来的秒数。因此,如果您将时区输入到创建时间戳的函数中,它将调整秒数。

然后,您可以将此值保存在MySQL int列中,因为时间戳是有符号整数。有关详细信息,请参见How should unix timestamps be stored in int columns?。你可以这样做

INSERT INTO table (timestamp, content) VALUES ('your timestamp','your content');

将其插入到你的表。

相关问题