हुउउफ़. एक ठंडी जकड़न आपकी रीढ़ की हड्डी तक अपना रास्ता बना लेती है।
हाआआआह. आपके बॉस की ठंडी सांसें उफनते सीवर की तरह आपकी गर्दन पर बहती हैं। लेकिन आप उन्हें कहीं और मंडराने के लिए नहीं कह सकते... जब से कार्यालय का समय-ट्रैकिंग सिस्टम टूटा है तब से वे आपको बाज़ की तरह देख रहे हैं।
अब, वे वहीं हैं...मँडरा रहे हैं...साँस ले रहे हैं। हफ़्फ़्फ़्फ़।
यहां बताया गया है कि जावास्क्रिप्ट के साथ मामलों को अपने हाथों में कैसे लिया जाए। हाआआ .
आपके पास एक टाइमशीट है जो इस 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 },
Date.parse
पर कॉल के बाद अंतर्निहित JS दिनांक अंकगणितीय विधियों के उपयोग की अनुमति मिलती है।
String.prototype.split
कॉल करने के परिणामों को संग्रहीत करने के लिए एक सुविधाजनक स्थान है, जो इस बात पर निर्भर नहीं हो सकता है कि दो दिनों में समान समय अंतराल शामिल है या नहीं।times
ऑब्जेक्ट पर। इस कोड को अनुकूलित करने के लिए, फ़ील्ड के रूप में totalHours
और times
वाले खाली ऑब्जेक्ट पर सिंगल रिड्यूस का उपयोग करना बेहतर होगा।
अब आप जानते हैं कि अस्त-व्यस्त टाइमशीट से समय कैसे निकाला जाता है। थोड़े अतिरिक्त प्रयास से, आप एक पूर्ण समय वाली घड़ी भी बना सकते हैं। लेकिन तब आपको अपने बॉस को जानने के लिए इतना अच्छा गुणवत्तापूर्ण समय बिताने का मौका नहीं मिलेगा, क्या आप ऐसा करेंगे? हफ़्फ़।