paint-brush
সহজ উপায়ে জাভাস্ক্রিপ্টে সময়ের ব্যবধান যোগ করুনদ্বারা@anwarhjg
740 পড়া
740 পড়া

সহজ উপায়ে জাভাস্ক্রিপ্টে সময়ের ব্যবধান যোগ করুন

দ্বারা AHJ George4m2024/01/13
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

আপনার কাছে একটি টাইমশিট স্ট্রিং, একটি হোভারিং বস এবং জাভাস্ক্রিপ্ট রয়েছে। সমস্যা: আপনি একসাথে ঘন্টা যোগ করতে চান এবং আপনার বসকে ঘোরাফেরা বন্ধ করতে চান। সমাধান: জাদুবিদ্যার প্রয়োজন নেই।
featured image - সহজ উপায়ে জাভাস্ক্রিপ্টে সময়ের ব্যবধান যোগ করুন
AHJ George HackerNoon profile picture
0-item

এই টিউটোরিয়ালটি সম্পূর্ণ করার জন্য আপনার এই জাদুকরী সরবরাহের কোনো প্রয়োজন হবে না। লেখক দ্বারা ছবি.



হুউউফ। একটি ঠান্ডা নিবিড়তা আপনার মেরুদণ্ডের নিচে কৃমি করে।


হাআআআহ। আপনার বসের হিমশীতল নিঃশ্বাস আপনার ঘাড়ে উপচে পড়া নর্দমার মতো ধুয়ে ফেলছে। কিন্তু আপনি তাদের অন্য কোথাও ঘুরতে বলতে পারবেন না... অফিসের সময়-ট্র্যাকিং সিস্টেম ভেঙে যাওয়ার পর থেকে তারা আপনাকে বাজপাখির মতো দেখছে।


এখন, তারা শুধু সেখানে... ঘোরাফেরা করছে... শ্বাস নিচ্ছে। হাফফফফফ।


আপনি একটি টাইমশিটে আপনার ঘন্টা লেখার চেষ্টা করেছেন, কিন্তু আপনার বস সেই সমস্ত শ্বাস-প্রশ্বাস নিয়ে বেশ ব্যস্ত। যদি তারা গণিতটি সঠিক না করে এবং আপনার সময় ভুল যোগ না করে তবে কী হবে?


জাভাস্ক্রিপ্টের সাহায্যে কীভাবে বিষয়গুলি নিজের হাতে নিতে হয় তা এখানে। হাআআআ

সমস্যাটি

আপনার কাছে একটি টাইমশীট রয়েছে যা এই 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`;


প্রতিটি লাইনে একটি তারিখের পরে কিছু সময়ের ব্যবধান থাকে। কিন্তু এগুলি খুব পরিষ্কারভাবে লেখা হয় না — কিছু ব্যবধান কমা দ্বারা পৃথক করা হয়, অন্যগুলিতে অনিয়মিত ব্যবধান থাকে ইত্যাদি।


এই অসামঞ্জস্যতার পরিপ্রেক্ষিতে, অন্য কোন গ্যারান্টি নেই বলে অনুমান করা সম্ভবত ভাল। উদাহরণস্বরূপ, কে বলে যে সমস্ত সময় একই বছর থেকে হবে? কেউ না, যে কে. আপনি যতটা সম্ভব দৃঢ়ভাবে একসাথে ঘন্টা যোগ করতে চান।

সমাধান

এই বেশ সহজ. আমরা কয়েকটি নিয়মিত অভিব্যক্তি এবং একটি সহায়ক ফাংশন তৈরি করে শুরু করি। তারপর, আমরা শুধু... হুউউউফফ!


উফ!! বস, এক সেকেন্ডের জন্য কোথাও ঠাণ্ডা করতে যান!


আমি যেমন বলছিলাম, এখন আমরা তিন-পদক্ষেপ অ্যালগরিদম দিয়ে কাজটি সম্পূর্ণ করতে পারি:


  1. আমরা টাইমশিট স্ট্রিংকে পৃথক লাইনে বিভক্ত করি এবং অবজেক্টের একটি অ্যারে তৈরি করতে সেগুলি কমিয়ে দিই


  2. প্রতিটি পুনরাবৃত্তির জন্য, আমরা:

    উ: তারিখের স্ট্রিং রেকর্ড করে yearRegex ব্যবহার করে বছরের চারপাশে লাইন বিভক্ত করুন

    বি. intervalsRegex ব্যবহার করে সব সময় সীমার ব্যবধান সংগ্রহ করুন

    C. সময় সীমার সাথে হ্রাস করুন, প্রতিটিকে একটি জাভাস্ক্রিপ্ট তারিখ অবজেক্ট হিসাবে parseDate হেল্পার এবং ধাপ 2.A থেকে তারিখ স্ট্রিং ব্যবহার করে পার্স করুন


  3. মোট ঘন্টা বের করতে অবজেক্টের অ্যারে কমিয়ে দিন


 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 সমন্বিত একটি খালি বস্তুর উপর একটি একক হ্রাস ব্যবহার করা ভাল।


  • এটি নিয়মিত এক্সপ্রেশন ব্যবহার করে যা আরও জটিল ফর্ম্যাটের সাথে আরও জটিল হতে পারে

মোড়ক উম্মচন

আপনি এখন জানেন কিভাবে একটি অগোছালো টাইমশীট থেকে সময় বের করতে হয়। একটু অতিরিক্ত প্রচেষ্টার সাথে, আপনি এমনকি একটি ফুল-অন-টাইম ঘড়ি তৈরি করতে পারেন। কিন্তু তারপরে আপনি আপনার বসকে জানার জন্য এত সুন্দর গুণমান সময় ব্যয় করতে পারবেন না, তাই না? হাফফফ।