2013-07-08 78 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');

將其插入到你的表。

相關問題