我們想獲取今天添加的所有行,我們有列名dnt(timestamp),但我們的時間表比服務器時區早12小時。那麼,什麼是SQL查詢來獲得當前結果。我們正在使用以下目前...選擇所有日期等於今天與時區差異
SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();
但由於時區差異,它沒有給出正確的結果。
謝謝。
我們想獲取今天添加的所有行,我們有列名dnt(timestamp),但我們的時間表比服務器時區早12小時。那麼,什麼是SQL查詢來獲得當前結果。我們正在使用以下目前...選擇所有日期等於今天與時區差異
SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();
但由於時區差異,它沒有給出正確的結果。
謝謝。
我與@MarvinLabs同意 - 這是一個設計缺陷。
但是如果你希望離開的設計,因爲它是你應該使用這樣的:
SELECT *
FROM messages
WHERE user = '$user'
AND DATE(CONVERT_TZ(dnt,'source_timezone','destination_timezone')) = CURDATE()
變化source-timezone
和destination_timezone
相應
MySQL的CONVERT_TZ()參考:here
我建議所有日期應存儲在GMT時區。然後在顯示時間的視圖中進行轉換。這樣,當您需要查詢某個日期時,首先將客戶端日期轉換爲GMT,並將其直接傳遞給您的SQL查詢。 SQL服務器有一些函數來獲取GMT日期而不是服務器日期。您還可以將GMT時區中的當前日期作爲查詢參數傳遞,而不是使用SQL函數(使用PHP函數獲取gmt日期)。
參見:gmmktime例如
我們如何知道源和desti國家時區? – seoppc 2011-03-07 14:18:57
源時區是'dnt'的時區,目標時區是數據庫本身的時區(通常是服務器的時區)。 – BigFatBaby 2011-03-07 15:30:47