आप समय के साथ और 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" है, क्लोज_टाइम "02:00" है, वर्तमान समय "22:41" है। हमारे पास क्लोज_टाइम के लिए एक अलग डीबी रिकॉर्ड है (क्योंकि यह मध्यरात्रि के बाद है), लेकिन हम इसे परिणाम में कभी नहीं प्राप्त करेंगे, क्योंकि क्लोज_टाइम "02:00" वर्तमान समय से अधिक नहीं है, "22:41"।
यदि वर्तमान समय "01:00" है, तो हमें अगले दिन मूल्य मिलेंगे, क्योंकि सप्ताहांत मेल नहीं खाता है।
तो समाधान क्या है?
क्या आप इन मानों को 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]
डेटाबेस में संग्रहीत खोलने/बंद समय मिनट में मान।
अब मान लीजिए कि वर्तमान समय "सूर्य, 01:00" (सप्ताह का पहला दिन) है, उपरोक्त कवरन निष्पादित करने के लिए यह मान 60 है; और सप्ताह के आखिरी दिन (शनिवार) के लिए खुले/बंद समय "17:00" और "02:00" (जो वास्तव में रविवार है) पर सेट होते हैं, डीबी में 9660 और 10200 (शनिवार, 26:00) के रूप में संग्रहीत होते हैं। । इस मामले में, उपरोक्त क्वेरी को हमें आवश्यक रिकॉर्ड (शनि, 17:00, 02:00) नहीं मिलेगा, क्योंकि हमारे पास शायद "02:00" (120) से कम कोई open_time नहीं है। इसे हल करने के लिए, हम "सन, 01:00" से "शनि, 25:00" को $ 7 * 1440 (पूरे सप्ताह) को $ currenttime में जोड़कर परिवर्तित करते हैं, जिसके परिणामस्वरूप 10140 होगा। फिर डीबी क्वेरी इस तरह:
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);
या वैकल्पिक और neater समाधान क्या है?
शायद उस समय के साथ एक तिथि स्टोर करना चाहिए? मध्यरात्रि के समय के बाद टॉमोरो का समय बन जाता है। एक DATETIME प्रारूप का भी उपयोग करें, न कि INT या अन्य –
नहीं, मैं DATETIME का उपयोग नहीं कर सकता क्योंकि मैं दिनांक का उपयोग नहीं कर रहा हूं। रोज़ाना खुलें, मैं पूरे साल की तारीख नहीं जोड़ना चाहता! –
http://stackoverflow.com/questions/8225684/how-to-find-out-if-store-open-or-close-dealing-with-hours –