2011-03-07 62 views
1

我們想獲取今天添加的所有行,我們有列名dnt(timestamp),但我們的時間表比服務器時區早12小時。那麼,什麼是SQL查詢來獲得當前結果。我們正在使用以下目前...選擇所有日期等於今天與時區差異

SELECT * FROM messages WHERE user ='$ user'AND DATE(dnt)= CURDATE();

但由於時區差異,它沒有給出正確的結果。

謝謝。

回答

1

我與@MarvinLabs同意 - 這是一個設計缺陷。

但是如果你希望離開的設計,因爲它是你應該使用這樣的:

SELECT * 
FROM messages 
WHERE user = '$user' 
    AND DATE(CONVERT_TZ(dnt,'source_timezone','destination_timezone')) = CURDATE() 
  • 變化source-timezonedestination_timezone相應

  • MySQL的CONVERT_TZ()參考:here

+0

我們如何知道源和desti國家時區? – seoppc 2011-03-07 14:18:57

+0

源時區是'dnt'的時區,目標時區是數據庫本身的時區(通常是服務器的時區)。 – BigFatBaby 2011-03-07 15:30:47

2

我建議所有日期應存儲在GMT時區。然後在顯示時間的視圖中進行轉換。這樣,當您需要查詢某個日期時,首先將客戶端日期轉換爲GMT,並將其直接傳遞給您的SQL查詢。 SQL服務器有一些函數來獲取GMT日期而不是服務器日期。您還可以將GMT時區中的當前日期作爲查詢參數傳遞,而不是使用SQL函數(使用PHP函數獲取gmt日期)。

參見:gmmktime例如