簡體   English   中英

PHP mySQL - UNIX_TIMESTAMP不等於strtotime

[英]PHP mySQL - UNIX_TIMESTAMP is not equal to strtotime

平台: PHP和mySQL

我將日期+時間存儲在數據庫中,格式如下:date(“Ymd H:i:s”)。 我在數據庫中擁有的值的示例是:2010-01-05 07:36:33。 在我的腳本中,我將時區設置為date_default_timezone_set("America/Chicago");

問題:

我在某處讀到了UNIX_TIMESTAMP,我在查詢中使用了它。 來自DB的日期值的UNIX_TIMESTAMP的值似乎與strotime(DB date Value)不同。

例:

請考慮我的數據庫中日期列的DB值之一是2010-01-05 07:36:33現在,如果我按以下方式獲取此日期:

$result = mysql_query("SELECT date, UNIX_TIMESTAMP(date) AS ut_date FROM table");
$row = mysql_fetch_row($result);

//The result of this is:
$row['date']    = 2010-01-05 07:36:33
$row['ut_date'] = 1262657193
strtotime($row['date']) gives 1262698593

對於我在我的應用程序中的進一步計算,我需要使用strtotime(日期)。 我有很多比較這樣做。 如果UNIX_TIMESTAMP(date)與strtotime(date)相同,我的問題就解決了。 我需要使用的示例查詢之一是:

$gap = 1; // time in minutes
$tm2 = date ("Y-m-d H:i:s", mktime (date("H"),date("i")-$gap,date("s"),date("m"),date("d"),date("Y")));
$target = strtotime($tm2);

$result2 = mysql_query("UPDATE table2 SET stat = 0 WHERE UNIX_TIMESTAMP(today_login_time) < $target ");

以上是給我錯誤的結果。 如果我嘗試在上面的查詢中用strtotime替換UNIX_TIMESTAMP,它會給我一個錯誤,因為函數strtotime似乎是PHP函數而不是各自的mySQL函數。 strtotime有相應的mySQL功能嗎? 我該如何解決上述問題? 解決上述問題的代碼非常受歡迎。

先感謝您。

可能MySQL服務器和php實例的時區不同。 例如

echo date('Ymd H:i:s T', 1262657193);

在我的機器上打印2010-01-05 03:06:33 CET (注意CET時區,即UTC + 1),而你的MySQL服務器解釋相同的unix時間戳為2010-01-05 07:36:33

請參閱http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
http://docs.php.net/datetime.configuration#ini.date.timezone

您不需要將sql時間戳轉換為unix以進行where查詢。 只需使用DATE_FORMAT就可以簡化:

 WHERE DATE_FORMAT(`today_login_time`, "%Y-%m-%d") < '.date('Y-m-d', $my_tsp)

由於差異恰好是11.5小時,因此您似乎遇到了時區問題。

格式日期(“Ymd H:i:s”)不能准確描述日期和時間,因為它不包含時區。 由於沒有提供時區,因此Web服務器和數據庫都在使用明顯不同的時區。

您應該考慮將日期作為unix時間戳存儲在數據庫中。 unix時間戳只是自Unix Epoch(1970年1月1日00:00:00 GMT)以來經過的秒數。 這不受時區或日光節省的影響。 這樣,您只需要在轉換為實際日歷日期和時間時擔心時區和夏令時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM