JavaScript Development

जावास्क्रिप्ट में मज़बूत तिथि स्ट्रिंग पार्सिंग

Spread the love

JavaScript में तिथियों के साथ काम करने में अक्सर स्ट्रिंग्स को Date ऑब्जेक्ट्स में बदलना शामिल होता है। यह प्रक्रिया आश्चर्यजनक रूप से सूक्ष्म हो सकती है, यह आपके इनपुट स्ट्रिंग के प्रारूप पर निर्भर करता है। यह लेख इस रूपांतरण को संभालने के लिए कई मजबूत तरीकों का पता लगाता है, सटीकता सुनिश्चित करता है और सामान्य समस्याओं को रोकता है।

विषयवस्तु की तालिका

Date कंस्ट्रक्टर का उपयोग करना

सबसे सरल तरीका सीधे Date कंस्ट्रक्टर का उपयोग करना है। हालाँकि, इस विधि की विश्वसनीयता इनपुट स्ट्रिंग के प्रारूप पर बहुत अधिक निर्भर करती है। जबकि यह विभिन्न प्रारूपों को स्वीकार करता है, असंगतियाँ अप्रत्याशित परिणाम दे सकती हैं।

उदाहरण (YYYY-MM-DD):


const dateString = "2024-03-15";
const date = new Date(dateString);
console.log(date); // आउटपुट: 15 मार्च, 2024 का प्रतिनिधित्व करने वाली Date ऑब्जेक्ट

सीमाएँ: “MM/DD/YYYY” जैसे प्रारूप अस्पष्ट हो सकते हैं (क्या 03 मार्च है या मई?), और स्थानीयकृत महीने के नामों (जैसे, “मार्च 15, 2024”) पर निर्भर करना आगे परिवर्तनशीलता लाता है। उत्पादन कोड के लिए, इसकी मजबूती की कमी के कारण इस दृष्टिकोण को आम तौर पर हतोत्साहित किया जाता है।

Date.parse() मेथड का उपयोग करना

Date.parse() एक दिनांक स्ट्रिंग को एक टाइमस्टैम्प (यूनिक्स युग के बाद से मिलीसेकंड) में बदल देता है। फिर आप इस टाइमस्टैम्प से एक Date ऑब्जेक्ट बना सकते हैं। यह प्रत्यक्ष कंस्ट्रक्टर की प्रारूप सीमाओं को साझा करता है और अतिरिक्त चरण और पार्सिंग विफल होने पर NaN की संभावना के कारण कम पसंद किया जाता है।


const dateString = "March 15, 2024";
const timestamp = Date.parse(dateString);
const date = new Date(timestamp);
console.log(date); // आउटपुट: 15 मार्च, 2024 का प्रतिनिधित्व करने वाली Date ऑब्जेक्ट (यदि पार्सिंग सफल होती है)

विश्वसनीयता के लिए मैनुअल स्ट्रिंग पार्सिंग

अधिकतम नियंत्रण और त्रुटि हैंडलिंग के लिए, स्ट्रिंग को उसके घटकों (वर्ष, महीना, दिन) में मैन्युअल रूप से पार्स करें। यह दृष्टिकोण अधिक विस्तृत है, लेकिन इनपुट प्रारूप विविधताओं की परवाह किए बिना सुसंगत व्यवहार की गारंटी देता है। त्रुटि हैंडलिंग आसानी से लागू की जाती है।


function parseDateString(dateString, format) {
  const parts = dateString.split(format.separator);
  if (parts.length !== 3) {
    return null; // अमान्य प्रारूप को संभालें
  }

  const year = parseInt(parts[format.yearIndex], 10);
  const month = parseInt(parts[format.monthIndex], 10) - (format.monthZeroIndexed ? 1 : 0);
  const day = parseInt(parts[format.dayIndex], 10);

  //मूल सत्यापन - यहां अधिक कठोर जांच जोड़ी जा सकती है
  if (isNaN(year) || isNaN(month) || isNaN(day) || month  11 || day  31) {
    return null;
  }

  return new Date(year, month, day);
}


const formats = {
  'yyyy-mm-dd': {separator: '-', yearIndex: 0, monthIndex: 1, dayIndex: 2, monthZeroIndexed: true},
  'mm/dd/yyyy': {separator: '/', yearIndex: 2, monthIndex: 0, dayIndex: 1, monthZeroIndexed: false}
}

const dateString1 = "2024-03-15";
const date1 = parseDateString(dateString1, formats['yyyy-mm-dd']);
console.log(date1); // आउटपुट: 15 मार्च, 2024 का प्रतिनिधित्व करने वाली Date ऑब्जेक्ट

const dateString2 = "03/15/2024";
const date2 = parseDateString(dateString2, formats['mm/dd/yyyy']);
console.log(date2); // आउटपुट: 15 मार्च, 2024 का प्रतिनिधित्व करने वाली Date ऑब्जेक्ट

const invalidDateString = "2024-13-15";
const invalidDate = parseDateString(invalidDateString, formats['yyyy-mm-dd']);
console.log(invalidDate); // आउटपुट: null

जटिल परिदृश्यों के लिए लाइब्रेरी का उपयोग करना

विशेष रूप से जटिल दिनांक/समय प्रारूपों या व्यापक दिनांक हेरफेर आवश्यकताओं के लिए, Moment.js (हालांकि यह अब पुराना है) या Luxon जैसी समर्पित JavaScript लाइब्रेरी का उपयोग करने पर विचार करें। ये लाइब्रेरी मजबूत पार्सिंग और स्वरूपण क्षमताएँ प्रदान करती हैं, प्रक्रिया को महत्वपूर्ण रूप से सरल बनाती हैं और किनारे के मामलों को प्रभावी ढंग से संभालती हैं।

निष्कर्ष

दिनांक स्ट्रिंग्स को बदलने के लिए सही विधि का चुनाव बहुत अधिक संदर्भ पर निर्भर करता है। उत्पादन वातावरण में इसकी विश्वसनीयता और रखरखाव के लिए मैनुअल पार्सिंग विधि को आम तौर पर अनुशंसित किया जाता है, खासकर जब कम-अनुप्रेडिक्टेबल इनपुट स्ट्रिंग्स से निपटते हैं। अधिक जटिल दिनांक हैंडलिंग आवश्यकताओं के लिए लाइब्रेरी शक्तिशाली विकल्प प्रदान करती हैं।

प्रातिक्रिया दे

आपका ईमेल पता प्रकाशित नहीं किया जाएगा. आवश्यक फ़ील्ड चिह्नित हैं *