एक ठंडी जकड़न आपकी रीढ़ की हड्डी तक अपना रास्ता बना लेती है। हुउउफ़. आपके बॉस की ठंडी सांसें उफनते सीवर की तरह आपकी गर्दन पर बहती हैं। लेकिन आप उन्हें कहीं और मंडराने के लिए नहीं कह सकते... जब से कार्यालय का समय-ट्रैकिंग सिस्टम टूटा है तब से वे आपको बाज़ की तरह देख रहे हैं। हाआआआह. अब, वे वहीं हैं...मँडरा रहे हैं...साँस ले रहे हैं। हफ़्फ़्फ़्फ़। आपने अपने घंटों को टाइमशीट पर लिखने का प्रयास किया, लेकिन आपका बॉस इस सारी प्रक्रिया में काफी व्यस्त है। यदि उन्होंने गणित सही से नहीं किया और आपके घंटे गलत जोड़ दिए तो क्या होगा? यहां बताया गया है कि जावास्क्रिप्ट के साथ मामलों को अपने हाथों में कैसे लिया जाए। . हाआआ समस्या आपके पास एक टाइमशीट है जो इस की सामग्री की तरह दिखती है: String const a = `November 30 2023 13:20-15:00, 15:30-16:40 December 4 2023 15:45-16:15, December 5 2023 08:00-08:30, 18:15-19:30, 21:45-22:15, 22:30-23:00 December 6 2023 19:45-21:45 December 7 2023 14:15-14:45, 15:15-15:45, 16:00-16:30, 16:45-17:15, 18:45-20:15, 20:45-22:45 December 13 2023 03:00-03:50 December 15 2023 09:00-09:30 20:30-21:15 21:45-22:30 23:30-24:00 December 16 2023 23:25-23:55 December 17 2023 19:05-19:50 20:30-21:30 22:15-23:45 December 20 2023 23:30-24:00 December 21 2023 02:20-2:50 03:15-03:30 13:40-14:00 16:00-17:15 17:45-18:45 19:20-20:10 21:30-22:20 23:00 - 24:00 December 22 2023 0:00-0:15`; प्रत्येक पंक्ति में एक तारीख और उसके बाद कुछ समय अंतराल होते हैं। लेकिन वे बहुत साफ-सुथरे ढंग से नहीं लिखे गए हैं - कुछ अंतराल अल्पविराम से अलग किए गए हैं, अन्य में अनियमित रिक्ति है, आदि। इन विसंगतियों को देखते हुए, कोई अन्य गारंटी न मानना संभवतः अच्छा होगा। उदाहरण के लिए, कौन कहता है कि सभी समय एक ही वर्ष के होंगे? कोई नहीं, वह कौन है। आप घंटों को यथासंभव मजबूती से जोड़ना चाहते हैं। समाधान यह बहुत आसान है. हम कुछ रेगुलर एक्सप्रेशन और एक सहायक फ़ंक्शन बनाकर शुरुआत करते हैं। फिर, हम बस... हुउउउउफ़्फ़! ऊँ!! बॉस, एक सेकंड के लिए कहीं शांत हो जाइए! जैसा कि मैं कह रहा था, अब हम तीन-चरणीय एल्गोरिदम के साथ कार्य पूरा कर सकते हैं: हम टाइमशीट स्ट्रिंग को अलग-अलग पंक्तियों में विभाजित करते हैं और ऑब्जेक्ट की एक सरणी बनाने के लिए उन्हें कम करते हैं प्रत्येक पुनरावृत्ति के लिए, हम: A. दिनांक स्ट्रिंग को रिकॉर्ड करते हुए, yearRegex उपयोग करके वर्ष के चारों ओर लाइन को विभाजित करें बी. intervalsRegex उपयोग करके सभी समय सीमा अंतरालों को एकत्रित करें सी. चरण 2.ए से parseDate सहायक और दिनांक स्ट्रिंग का उपयोग करके प्रत्येक को जावास्क्रिप्ट दिनांक ऑब्जेक्ट के रूप में पार्स करते हुए, समय सीमा को कम करें। कुल घंटे ज्ञात करने के लिए वस्तुओं की श्रृंखला को कम करें const yearRegex = /(\d{4})/gi; const intervalsRegex = /(\d+\:\d+)\s*-\s*(\d+\:\d+)/gi; const parseDate = (date, time) => Date.parse(`${date} ${time}`); let times = [...a.split("\n")].reduce((arr, entryLine) => { let entryLineSplit = entryLine.split(yearRegex); let o = { date: entryLineSplit[0] + entryLineSplit[1], timeRanges: [...entryLine.matchAll(intervalsRegex)], }; o.hoursForDay = o.timeRanges.reduce((total, [x, start, end]) => { let s = parseDate(o.date, start); let e = parseDate(o.date, end); return total + (e - s) / 1000 / 60 / 60; }, 0); return [...arr, o]; }, []); console.log(times); let totalHours = times.reduce((total, { hoursForDay }) => total + hoursForDay, 0); console.log(totalHours); यदि आप कथन, आपको एक सरणी दिखाई देगी जिसमें ऑब्जेक्ट होंगे जैसे: console.log(times); { date: 'November 30 2023', timeRanges: [ [ '13:20-15:00', '13:20', '15:00', index: 17, input: 'November 30 2023 13:20-15:00, 15:30-16:40', groups: undefined ], [ '15:30-16:40', '15:30', '16:40', index: 30, input: 'November 30 2023 13:20-15:00, 15:30-16:40', groups: undefined ] ], totalHours: 2.8333333333333335 }, इस विधि के लाभ केवल समय अंतराल निकालने और उन्हें जोड़ने की तुलना में वस्तुओं की एक श्रृंखला बनाने के कुछ विशिष्ट फायदे हैं। यह तथ्य के बाद आसान ट्रैवर्सल बनाता है। यदि आप अपने दैनिक समय का ग्राफ़ जैसा कुछ करना चाहते हैं तो यह आदर्श है। प्रत्येक रिकॉर्ड के लिए दिनांक स्ट्रिंग को सहेजने से पर कॉल के बाद अंतर्निहित JS दिनांक अंकगणितीय विधियों के उपयोग की अनुमति मिलती है। Date.parse ऑब्जेक्ट कॉल करने के परिणामों को संग्रहीत करने के लिए एक सुविधाजनक स्थान है, जो इस बात पर निर्भर नहीं हो सकता है कि दो दिनों में समान समय अंतराल शामिल है या नहीं। String.prototype.split इस विधि के नुकसान यह समाधान सही नहीं है: इसके लिए दो बड़े ट्रैवर्सल की आवश्यकता होती है - एक बार टाइमशीट को विभाजित करने के परिणाम पर, और फिर एक बार ऑब्जेक्ट पर। इस कोड को अनुकूलित करने के लिए, फ़ील्ड के रूप में और वाले खाली ऑब्जेक्ट पर सिंगल रिड्यूस का उपयोग करना बेहतर होगा। times totalHours times यह नियमित अभिव्यक्ति का उपयोग करता है जो अधिक जटिल प्रारूप के साथ और अधिक जटिल हो सकता है ऊपर लपेटकर अब आप जानते हैं कि अस्त-व्यस्त टाइमशीट से समय कैसे निकाला जाता है। थोड़े अतिरिक्त प्रयास से, आप एक पूर्ण समय वाली घड़ी भी बना सकते हैं। लेकिन तब आपको अपने बॉस को जानने के लिए इतना अच्छा गुणवत्तापूर्ण समय बिताने का मौका नहीं मिलेगा, क्या आप ऐसा करेंगे? हफ़्फ़।