如何處理PHP/MySQL中的時間和午夜後?處理時間和午夜後
使用INT
存儲分鐘或使用TIME
類型字段?
考慮下面的SQL查詢:
SELECT * FROM opening_hours
WHERE week_day = WEEKDAY(NOW()) + 1
AND open_hour =< date_format(now(),'%H:%i')
AND close_hour >= date_format(now(),'%H:%i')
open_hour
/close_hour
字段TIME
類型字段。
假設open_time是「18:00」,close_time是「02:00」,當前時間是「22:41」。我們有一個關於close_time的單獨數據庫記錄(因爲它在午夜之後),但是我們永遠不會在結果中得到它,因爲close_time「02:00」不會比當前時間「22:41」更大。
此外,如果當前時間爲「01:00」,我們將獲取NEXT日值,因爲週日不匹配。
那麼解決方案是什麼?
您寧願將這些值存儲在INT
(分鐘)中,以便PHP能夠直接處理這些值,而無需任何轉換?
例如...
當前時間:
// w = Day of the week, H = 24-hour format, i = Minutes
$timearr = explode(':',date("w:H:i"));
$currenttime = ($timearr[0]) * 1440 + $timearr[1] * 60 + $timearr[2]
在數據庫中,存儲的打開/關閉時間以分鐘爲單位的值。現在假設當前時間是「Sun,01:00」(一週中的第一天),執行上述覆蓋率,則該值爲60; (星期六)的最後一天的開啓/關閉時間被設置爲DB爲9660和10200(星期六,26:00)的「17:00」和「02:00」(實際上是星期天) 。在這種情況下,上述查詢將找不到我們需要的記錄(星期六,17:00,02:00),因爲我們可能沒有小於「02:00」(120)的open_time。爲了解決這個問題,我們將「Sun,01:00」轉換爲「Sat,25:00」,在$ currenttime中添加7 * 1440(整週),這將導致10140.然後DB查詢如下:
SELECT open_time,clos_time FROM open_hours
WHERE (open_time <= $currenttime
AND close_time >= $currenttime)
OR (open_time <= $currenttime +10080
AND close_time >= $currenttime + 10080);
或者什麼是替代和整潔的解決方案?
也許存儲一個日期和時間?午夜後成爲明天的時間。也使用DATETIME格式,而不是INT或其他 –
否我不能使用DATETIME,因爲我不打算使用Date。每天開店,我不想添加全年的日期! –
http://stackoverflow.com/questions/8225684/how-to-find-out-if-store-open-or-close-dealing-with-hours –