2010-01-26 13 views
7

हम एक सेवा चलाते हैं जो 2 व्यावसायिक दिन एसएलए पर आधारित है, इसलिए अगर अनुरोध सोमवार को 1 बजे जमा किया जाता है तो इसे बुधवार को 1 बजे तक पूरा किया जाना चाहिए।PHP दो तिथियों के बीच कार्यालय घंटों की संख्या की गणना करने के लिए

तो डेटाबेस में मेरे पास दो MySQL टाइमस्टैम्प हैं YYYY/MM/DD HH: MM: SS, और 9 बजे से शाम 5 बजे के कार्यालय घंटों के आधार पर कार्य समय में दोनों तिथियों के बीच समय को काम करने का कोई तरीका चाहिए।

क्या कोई मुझे कोई विचार दे सकता है?

उत्तर

0

सामान्य शब्दों में, दिए गए टाइम स्टांप ए और बी, जहां एक प्रारंभ समय:

  • ए और बी के बीच दिनों की संख्या का निर्धारण (वहाँ यह करने के लिए आसान तरीके हैं), यह डी फोन
  • यदि एचएच: एमएम: टाइमस्टैम्प बी के लिए एसएस ए के लिए अधिक या उसके बराबर है, तो समय अंतर एच जोड़ें, डी (दिन) + एच (समय)
  • यदि एचएच: एमएम: टाइमस्टैम्प के लिए एसएस बी ए से कम है, डी से 1 घटाएं और समय अंतर एच 8 घंटे जोड़ें, डी -1 (दिन) + 8 (घंटे) - एच

आपके उदाहरण में, यदि ए सोमवार 1 बजे है और बी बुधवार 1 बजे है, तो डी 2 है। चूंकि समय समान हैं, एच 0 है और इसलिए कुल अंतर 2 कार्य दिवस है।

यदि बी बुधवार को 3 बजे थे, तो कुल अंतर 2 दिन और 2 घंटे होगा।

यदि बी 9 बजे बुधवार था, तो कुल अंतर 1 दिन और 4 घंटे होगा।

उपरोक्त विधि सप्ताहांत या छुट्टियों को संभाल नहीं पाती है, इसलिए आपको उचित संशोधन करना होगा।

1

सबसे आसान तरीका प्रत्येक दिन के लिए एक लाइन के साथ अपने डेटाबेस में एक टेबल स्टोर करना होगा, जिसमें उस दिन उपलब्ध कार्य समय शामिल होगा। यह आपको छुट्टियों और सप्ताह के अंतराल को उच्च ग्रैन्युलरिटी के साथ संभालने की सुविधा देता है, और आप उपयोगकर्ता द्वारा निर्दिष्ट दो तिथियों के बीच के दिनों में योग चलाने के द्वारा उपलब्ध समय की मात्रा प्राप्त कर सकते हैं।

0

एसक्यूएल के माध्यम से इसे बनाना केवल कठिन है। MySQL में एक टाइमस्टैम्प के बीच अंतर यह है कि जिस तरह से गणना की जा सकता है ...

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T; 

... लेकिन यह है कि ऑप्टिकल फाइबर केबल को ध्यान में किसी भी कार्यालय समय नहीं ले करता है।

कृपया ध्यान रखें कि SQL आपके कार्यालय के घंटे नहीं जानता है, और वे अन्य कारकों पर भी भरोसा कर सकते हैं (सप्ताहांत, बैंक छुट्टियां या जो कुछ भी)। ऐसा करने के लिए, आपको पहले कैलेंडर तालिका सेट करनी होगी और फिर गणना शुरू करनी होगी।

मुझे कुछ साल पहले भी इसी तरह की समस्या थी, वहां मैंने बैकएंड स्क्रिप्ट का उपयोग किया जिसमें मैंने समय और छुट्टियों को परिभाषित किया। मैंने पहली बार डेटा डालने के दौरान भविष्य के टाइमस्टैम्प की गणना की, जो कि अधिक आसान और अधिक लचीला था।

संबंधित मुद्दे

 संबंधित मुद्दे