‘Date’ অবজেক্ট

এই প্রবন্ধটি ‘Date’ অবজেক্ট ব্যাখ্যা করে।

আমরা ‘Date’ অবজেক্টটি ধাপে ধাপে ব্যাখ্যা করবো, মৌলিক কাঠামো থেকে শুরু করে বাস্তব কাজে ব্যবহৃত সাধারণ অপারেশন পর্যন্ত, স্পষ্ট উদাহরণসহ।

YouTube Video

‘Date’ অবজেক্ট

‘Date’ অবজেক্ট কী?

জাভাস্ক্রিপ্টের ‘Date’ অবজেক্ট হল তারিখ ও সময় পরিচালনার জন্য একটি স্ট্যান্ডার্ড অবজেক্ট। আভ্যন্তরীণভাবে, এটি তারিখ ও সময় পরিচালনা করে ১৯৭০ সালের ১ই জানুয়ারি, ০০:০০:০০ ইউটিসি থেকে কেটে যাওয়া মিলিসেকেন্ডের উপর ভিত্তি করে।

প্রথমত, চলুন আমরা বর্তমান তারিখ ও সময় উপস্থাপনকারী একটি Date অবজেক্ট তৈরি করি এবং তার বিষয়বস্তু পরীক্ষা করি।

1const now = new Date();
2console.log(now);
  • এই কোডটি বর্তমান সময়ে এক্সিকিউশনের মুহূর্তের বর্তমান তারিখ ও সময় প্রদর্শনকারী একটি ‘Date’ অবজেক্ট তৈরি করে। প্রদর্শন ফরম্যাটটি নির্ভর করে এক্সিকিউশন এনভায়রনমেন্টের উপর, যেমন ব্রাউজার বা অপারেটিং সিস্টেমের।

একটি ‘Date’ অবজেক্ট কীভাবে তৈরি করবেন

আপনার প্রয়োজন অনুযায়ী ‘Date’ অবজেক্ট বিভিন্ন ভাবে তৈরি করা যেতে পারে। একটি বিশেষ গুরুত্বপূর্ণ বিষয় যা সহজেই ভুল হওয়ার সম্ভাবনা থাকে তা হল, কনস্ট্রাক্টরের month প্যারামিটারটি শূন্য ভিত্তিক হয়, অর্থাৎ মাস গণনা 0 থেকে শুরু হয়।

1const d1 = new Date();                     // Current date and time
2const d2 = new Date("2025-01-01");         // Create from an ISO date string
3const d3 = new Date(2025, 0, 1);           // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30);   // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);
  • new Date(year, month, day)-এ, month প্যারামিটারে 0 জানুয়ারি আর 11 ডিসেম্বার বোঝায়। আপনি যদি এ নিয়মটি বুঝতে না পারেন, তবে ভুলবশত এক মাস পিছিয়ে বা এগিয়ে তারিখ তৈরি করতে পারেন, তাই সর্বদা সতর্ক থাকুন।

তারিখ ও সময়ের প্রতিটি উপাদান বের করা

আপনি একটি Date অবজেক্ট থেকে পৃথকভাবে বছর, মাস, দিন, সময় এবং সপ্তাহের দিন বের করতে পারেন। সব গেটার মেথড সংখ্যা হিসেবে মান ফেরত দেয়।

1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth());    // Month (0-based: 0 = January)
5console.log(date.getDate());     // Day of the month
6console.log(date.getHours());    // Hours
7console.log(date.getMinutes());  // Minutes
8console.log(date.getSeconds());  // Seconds
9console.log(date.getDay());      // Day of the week (0 = Sunday, 6 = Saturday)
  • তৈরির সময়ের মতো, getMonth()-ও শূন্য ভিত্তিক, তাই সাবধান থাকুন। প্রদর্শনের সময় সাধারণত মান যথাযথ করতে ১ যোগ করা হয়।
  • getDay() সপ্তাহের দিনটি একটি নম্বর হিসেবে ফিরিয়ে দেয়। ০ দ্বারা রোববার এবং ৬ দ্বারা শনিবার বোঝানো হয়।

তারিখ ও সময় পরিবর্তন

‘Date’ একটি পরিবর্তনশীল (mutable) অবজেক্ট, অর্থাৎ পরে এর মান পরিবর্তন করা যায়। এটি সুবিধাজনক, তবে অনিচ্ছাকৃত পার্শ্বপ্রতিক্রিয়ার ব্যাপারে সতর্ক থাকতে হবে।

আপনি বিদ্যমান Date অবজেক্টের মান পরিবর্তনের জন্য set মেথড ব্যবহার করতে পারেন।

1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5);   // June
5date.setDate(15);
6
7console.log(date);
  • setMonth()-ও শূন্য ভিত্তিক। মূল অবজেক্ট সরাসরি পরিবর্তিত হয়।

তারিখ যোগ ও বিয়োগ করা

তারিখ গণনায় সাধারণত মিলিসেকেন্ড বা setDate() ব্যবহৃত হয়। দিন ভিত্তিক গণনার জন্য setDate() ব্যবহার করা বিশেষভাবে সহজবোধ্য ও নিরাপদ।

1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);
  • এই উদাহরণে, আমরা নির্দিষ্ট তারিখ থেকে ৭ দিন পরের তারিখ গণনা করছি। যদি যোগফল নতুন মাসে পৌঁছায়, তবুও এটি স্বয়ংক্রিয়ভাবে সমন্বয় করা হয়।

‘Date’ অবজেক্ট তুলনা করা

‘Date’ অবজেক্ট সংখ্যার মতো তুলনা করা যায়। এর কারণ হল অভ্যন্তরীণ মিলিসেকেন্ড মান তুলনা করা হয়।

1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b);   // true
5console.log(a > b);   // false
  • আপনি যদি তারিখের ক্রম নির্ধারণ করতে চান, তবে বাড়তি কোনো রূপান্তরের দরকার পড়ে না। আপনি তুলনা অপারেটর সরাসরি ব্যবহার করতে পারেন।

টাইমস্ট্যাম্প (মিলিসেকেন্ড) নিয়ে কাজ করা

‘Date’ কে মিলিসেকেন্ড/টাইমস্ট্যাম্পের সংখ্যা থেকে ও তাতে রূপান্তর করা যায়। এই ফরম্যাট প্রায়শই API বা ডাটাবেস ইন্টিগ্রেশনে ব্যবহৃত হয়।

1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);
  • Date.now() বর্তমান সময় মিলিসেকেন্ড হিসেবে ফেরত দেয়। যখন আপনি মানটিকে সংখ্যা হিসেবে সংরক্ষণ বা তুলনা করতে চান তখন এটি অত্যন্ত উপকারী।

তারিখকে স্ট্রিং হিসেবে ফরম্যাট করা

‘Date’ কে অপরিবর্তিতভাবে দেখালে অনেক সময় কাঙ্ক্ষিত ফরম্যাট আসে না। তাই, আপনার প্রয়োজন অনুযায়ী এটিকে নির্দিষ্টভাবে ফরম্যাট করা উচিত।

1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);
  • এভাবে নিজে ফরম্যাট করলে আপনি সম্পূর্ণভাবে প্রদর্শন ফরম্যাট নিয়ন্ত্রণ করতে পারেন। বাস্তব কাজে এক্ষেত্রে প্রায়শই লাইব্রেরি ব্যবহার করা হয়।

ইউটিসি ও স্থানীয় সময়ের পার্থক্য

‘Date’ স্থানীয় সময় ও ইউটিসি ব্যবস্থাপনার জন্য প্রয়োজনীয় মেথড প্রদান করে। সার্ভার ইন্টিগ্রেশন এবং আন্তর্জাতিক সামঞ্জস্যের জন্য এই পার্থক্য সঠিকভাবে বোঝা জরুরি।

1const date = new Date();
2
3console.log(date.getHours());    // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
  • getUTC* মেথডগুলো সবসময় ইউটিসি ভিত্তিক মান দেয়। টাইমজোন পারাপারে ডেটা প্রসেসিংয়ের সময় বিশেষভাবে সতর্ক থাকুন।

‘Date’ অবজেক্ট ব্যবহারে সতর্কতা

‘Date’ সুবিধাজনক, তবে এতে কিছু জটিল দিকও রয়েছে। বিশেষত, মাসের শূন্য ভিত্তিক গণনা ও পরিবর্তনশীলতাই সাধারণত বাগের কারণ হয়ে দাঁড়ায়।

চলুন আমরা নীচের নির্দিষ্ট কিছু উদাহরণ দেখি যাতে বোঝা যায় Date পরিবর্তনযোগ্য হওয়ায় কী প্রভাব পড়ে।

1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);
  • মূল তারিখ ও সময় রাখতে চাইলে সর্বদা একটি কপি তৈরি করুন। এই বিষয়টি মাথায় রাখলেই অনিচ্ছাকৃত বাগ এড়ানো সহজ হবে।

কেন Date পরিচালনা করা কঠিন এবং কোন পরিস্থিতিতে লাইব্রেরি ব্যবহারের প্রয়োজন তা জানার কারণসমূহ

Date অবজেক্ট একটি স্ট্যান্ডার্ড ফাংশন হিসেবে যথেষ্ট ফিচার প্রদান করে, তবে কিছু বাস্তব পরিস্থিতিতে এটি ব্যবহারে অসুবিধা হয়। সাধারণ সমস্যাগুলোর মধ্যে আছে মাস ও সপ্তাহের দিন শূন্য থেকে গোনা, লোকাল টাইম ও UTC বিভ্রান্তি, এবং অবজেক্টটি পরিবর্তনযোগ্য হওয়া। তারিখ প্রক্রিয়াকরণ বাড়ার সাথে সাথে এই সমস্যাগুলো বেশি বাগের সৃষ্টি করতে পারে।

সহজ তারিখ বের করা বা তুলনার জন্য Date যথেষ্ট, তবে তারিখের উপর বেশি হিসাব-নিকাশ বা ফরম্যাটিং করলে কোড বুঝা ও রক্ষণাবেক্ষণ কঠিন হয়ে পড়ে।

যদি নিচের মতো চাহিদা থাকে, তাহলে dayjs বা date-fns এর মতো হালকা তারিখ লাইব্রেরি ব্যবহারের কথা চিন্তা করতে পারেন।

  • আপনাকে স্পষ্টভাবে টাইম জোন পরিচালনা করতে হবে
  • আপনাকে প্রায়ই তারিখ বা ব্যবধানের গণনা করতে হয়
  • আপনি প্রদর্শনের ফরম্যাট নমনীয়ভাবে পরিবর্তন করতে চান
  • আপনি তারিখ ও সময় অপরিবর্তনীয়ভাবে পরিচালনা করতে চান

সারসংক্ষেপ

জাভাস্ক্রিপ্টে তারিখ ও সময় পরিচালনার জন্য ‘Date’ অবজেক্ট সবচেয়ে মৌলিক টুল। এর বিশেষত্ব বুঝে সঠিক তৈরি, গ্রহণ, গণনা ও ফরম্যাটিং করলে বাস্তব কাজেও নিরাপদে ব্যবহার করতে পারবেন।

মূল বিষয়বস্তু আয়ত্ত করার পর, প্রয়োজনে ডেট লাইব্রেরি ব্যবহার করা বাস্তবিকভাবে সুবিধাজনক বিকল্প।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video