2012-10-02 233 views
1

我真的對我所做的腳本感到不滿,因爲我在這個腳本中比較了時間戳。 我可以看到時間戳完全不同。PHP時間戳和mysql時間戳的區別

  1. 對於2012年10月2日3點06分21秒,時間戳記是:1349190381
  2. 對於2012年10月2日4點00分50秒,時間戳記是:1349150450

我不能不明白爲什麼第二個時間戳比第一個時間戳低,即使時間較長。我怎樣才能比較兩個日期?

我通過strtotime()函數獲取這些值。

澄清:我使用

$current_timestamp = strtotime(date('Y-m-d H:i:s')); 

$till_date_timestamp = strtotime($database_object->till_date); 
+0

這將是很好看你有沒有用來產生這些時間戳的代碼。 – ajtrichards

+0

MySQL服務器在同一臺服務器上嗎?可能是兩臺機器之間的時區和/或時間差造成的。 – Ren

+0

您是否嘗試過比較'time()'與'strtotime($ dbobj-> till_date)'?儘管如此,仍然不會迎合PHP和MySQL之間的時區差異。 –

回答

1

這是我得到的result。它們與你在問題中提到的不同。

代碼:

echo strtotime('2012-10-02 03:06:21'); //outputs: 1349147181 
    echo "\n"; 
    echo strtotime('2012-10-02 04:00:50'); //outputs: 1349150450 

編輯:

$till_date_timestamp = strtotime($database_object->till_date);確保$database_object->till_date是一個字符串。

2

你敢肯定是正確的?

mysql> select from_unixtime(1349190381), from_unixtime(1349150450); 
+---------------------------+---------------------------+ 
| from_unixtime(1349190381) | from_unixtime(1349150450) | 
+---------------------------+---------------------------+ 
| 2012-10-02 09:06:21  | 2012-10-01 22:00:50  | 
+---------------------------+---------------------------+ 
1 row in set (0.00 sec) 

php > echo date('r', 1349190381), "\n", date('r', 1349150450); 
Tue, 02 Oct 2012 10:06:21 -0500 
Mon, 01 Oct 2012 23:00:50 -0500 

你在strtotime調用中使用了什麼字符串?函數CAN錯誤解釋輸入,除了格式正確且無歧義的日期字符串外,不應信任任何內容。

2

不要依靠strtotime!另外很明顯,PHP的時區與數據庫的時區不同。確保時區相同或得到電流/直到時間戳像這樣(讓他們從一個源):

SELECT UNIX_TIMESTAMP() AS 'Current' UNIX_TIMESTAMP(`datefield`) AS 'Till' FROM `table`