হুউউফ। একটি ঠান্ডা নিবিড়তা আপনার মেরুদণ্ডের নিচে কৃমি করে।
হাআআআহ। আপনার বসের হিমশীতল নিঃশ্বাস আপনার ঘাড়ে উপচে পড়া নর্দমার মতো ধুয়ে ফেলছে। কিন্তু আপনি তাদের অন্য কোথাও ঘুরতে বলতে পারবেন না... অফিসের সময়-ট্র্যাকিং সিস্টেম ভেঙে যাওয়ার পর থেকে তারা আপনাকে বাজপাখির মতো দেখছে।
এখন, তারা শুধু সেখানে... ঘোরাফেরা করছে... শ্বাস নিচ্ছে। হাফফফফফ।
আপনি একটি টাইমশিটে আপনার ঘন্টা লেখার চেষ্টা করেছেন, কিন্তু আপনার বস সেই সমস্ত শ্বাস-প্রশ্বাস নিয়ে বেশ ব্যস্ত। যদি তারা গণিতটি সঠিক না করে এবং আপনার সময় ভুল যোগ না করে তবে কী হবে?
জাভাস্ক্রিপ্টের সাহায্যে কীভাবে বিষয়গুলি নিজের হাতে নিতে হয় তা এখানে। হাআআআ
আপনার কাছে একটি টাইমশীট রয়েছে যা এই 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`;
প্রতিটি লাইনে একটি তারিখের পরে কিছু সময়ের ব্যবধান থাকে। কিন্তু এগুলি খুব পরিষ্কারভাবে লেখা হয় না — কিছু ব্যবধান কমা দ্বারা পৃথক করা হয়, অন্যগুলিতে অনিয়মিত ব্যবধান থাকে ইত্যাদি।
এই অসামঞ্জস্যতার পরিপ্রেক্ষিতে, অন্য কোন গ্যারান্টি নেই বলে অনুমান করা সম্ভবত ভাল। উদাহরণস্বরূপ, কে বলে যে সমস্ত সময় একই বছর থেকে হবে? কেউ না, যে কে. আপনি যতটা সম্ভব দৃঢ়ভাবে একসাথে ঘন্টা যোগ করতে চান।
এই বেশ সহজ. আমরা কয়েকটি নিয়মিত অভিব্যক্তি এবং একটি সহায়ক ফাংশন তৈরি করে শুরু করি। তারপর, আমরা শুধু... হুউউউফফ!
উফ!! বস, এক সেকেন্ডের জন্য কোথাও ঠাণ্ডা করতে যান!
আমি যেমন বলছিলাম, এখন আমরা তিন-পদক্ষেপ অ্যালগরিদম দিয়ে কাজটি সম্পূর্ণ করতে পারি:
আমরা টাইমশিট স্ট্রিংকে পৃথক লাইনে বিভক্ত করি এবং অবজেক্টের একটি অ্যারে তৈরি করতে সেগুলি কমিয়ে দিই
প্রতিটি পুনরাবৃত্তির জন্য, আমরা:
উ: তারিখের স্ট্রিং রেকর্ড করে yearRegex
ব্যবহার করে বছরের চারপাশে লাইন বিভক্ত করুন
বি. intervalsRegex
ব্যবহার করে সব সময় সীমার ব্যবধান সংগ্রহ করুন
C. সময় সীমার সাথে হ্রাস করুন, প্রতিটিকে একটি জাভাস্ক্রিপ্ট তারিখ অবজেক্ট হিসাবে parseDate
হেল্পার এবং ধাপ 2.A থেকে তারিখ স্ট্রিং ব্যবহার করে পার্স করুন
মোট ঘন্টা বের করতে অবজেক্টের অ্যারে কমিয়ে দিন
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
সমন্বিত একটি খালি বস্তুর উপর একটি একক হ্রাস ব্যবহার করা ভাল।
আপনি এখন জানেন কিভাবে একটি অগোছালো টাইমশীট থেকে সময় বের করতে হয়। একটু অতিরিক্ত প্রচেষ্টার সাথে, আপনি এমনকি একটি ফুল-অন-টাইম ঘড়ি তৈরি করতে পারেন। কিন্তু তারপরে আপনি আপনার বসকে জানার জন্য এত সুন্দর গুণমান সময় ব্যয় করতে পারবেন না, তাই না? হাফফফ।