DanLevy.net

क्विज़: 14 जावास्क्रिप्ट डेट प्रश्न

JS ट्रिविया के साथ महफिलों में धाक जमाना सीखें! ✨

Hero image for क्विज़: 14 जावास्क्रिप्ट डेट प्रश्न

आप Date क्लास को कितनी अच्छी तरह जानते हैं?

रूपरेखा

JavaScript में Date क्लास का API अपनी पेचीदगी के लिए कुख्यात है। इसे Java से विरासत में लिया गया था, और मेरा मानना है कि यह प्राचीन पाषाण काल की समय-गणना विधियों से प्रेरित था।

Date के साथ इस जद्दोजहद के कारण कई डेवलपर्स बिना सोचे-समझे थर्ड-पार्टी लाइब्रेरीज़ का उपयोग करने लगते हैं। हालांकि ये अक्सर एक सुरक्षित और भरोसेमंद विकल्प होते हैं, लेकिन डेट फॉर्मेटिंग या लोकलाइजेशन के लिए इन लाइब्रेरीज़ की शायद ही कभी ज़रूरत पड़ती है!

यह क्विज़ नेटिव Date API के बारे में आपके ज्ञान का परीक्षण करने (और उसे गहरा करने) के लिए बनाया गया है। हिंट और स्पष्टीकरण के लिए हरे बटन का उपयोग करें! उम्मीद है कि इस चैलेंज के अंत तक, JavaScript में Date को लेकर आपकी समझ मज़बूत हो जाएगी।

नोट: मान लें कि सभी उदाहरण GMT-7 लोकल टाइमज़ोन के हिसाब से हैं।

👇 नीचे 14 प्रश्न दिए गए हैं 👇


आउटपुट में क्या शामिल होगा?

const d1 = new Date(2020, 1, 1)
console.log(d1)

Month (महीना) आर्गुमेंट ज़ीरो-बेस्ड (zero-based) होता है। इसकी रेंज 0-11 होती है (पश्चिमी कैलेंडर के अनुसार)।

‘February’ की इंडेक्स वैल्यू 1 होती है। (इसे एक एरे लुकअप की तरह समझें।)

आउटपुट में क्या शामिल होगा?

const d2 = new Date(2020, 0, 1)
console.log(d2)

Month आर्गुमेंट zero-based होता है। इसकी रेंज 0-11 होती है (पश्चिमी कैलेंडर के अनुसार)।

‘January’ की इंडेक्स वैल्यू शून्य (0) होती है। (इसे एक array lookup की तरह समझें।)

आउटपुट में क्या शामिल होगा?

const d3 = Date('Thu, 01 Jan 1970 00:00:00 GMT')
console.log(d3)

new कीवर्ड को न भूलें! Date एक क्लास है, और इसे new के साथ कॉल किया जाना चाहिए।

बिना new के Date('...') आपके द्वारा दिए गए इनपुट को अनदेखा कर देता है। यह हमेशा new Date() (बिना किसी argument के) की तरह वर्तमान तारीख और समय (current date & time) ही देता है।

यह एक common gotcha है जिसे कोड रिव्यू में भी पकड़ना मुश्किल हो सकता है।

आउटपुट में क्या शामिल होगा?

const date = new Date(2020)
console.log(date.getFullYear())

एक सिंगल इंटीजर आर्गुमेंट के साथ बनाया गया Date इंस्टेंस Unix Epoch वैल्यू के रूप में इंटरप्रेट किया जाता है। Epoch 1 जनवरी, 1970 से मिलीसेकंड की गिनती है।

2020 (मिलीसेकंड) की वैल्यू 1 जनवरी, 1970 के 2 सेकंड बाद के समय को दर्शाती है।

चूंकि हमारा लोकल टाइम ज़ोन -7 घंटे का नेगेटिव ऑफसेट है, इसलिए हमें Wed Dec 31 1969 17:00:02 GMT-0700 (Mountain Standard Time) मिलता है।

आप .getUTCFullYear() का उपयोग करके लोकल टाइमज़ोन ऑफसेट से बच सकते हैं।

कंसोल पर क्या वैल्यू प्रिंट होगी?

const d1 = new Date('2020-01-01')
const d2 = new Date('2020-01-01T00:00')
console.log(d1.getFullYear(), d2.getFullYear())

बिना T टाइम वैल्यू वाली स्ट्रिंग 1 जनवरी, 2020 लग सकती है - लेकिन केवल डेट वाली स्ट्रिंग्स को UTC माना जाता है, और जब इसे स्थानीय टाइमज़ोन (GMT-7) में एडजस्ट किया जाता है, तो हम पाते हैं कि हम अभी भी 2019 में ही हैं।

बिना किसी स्पष्ट टाइमज़ोन वाली डेट-टाइम स्ट्रिंग्स को स्थानीय समय (local time) में इंटरप्रेट किया जाता है।

T00:00 फॉर्मेट के कारण दूसरी वैल्यू को स्थानीय आधी रात (local midnight) के रूप में इंटरप्रेट किया जाता है।

पहली डेट को Tue Dec 31 2019 17:00:00 GMT-0700 (Mountain Standard Time) के रूप में इंटरप्रेट किया गया है। दूसरी डेट को Wed Jan 01 2020 00:00:00 GMT-0700 (Mountain Standard Time) के रूप में इंटरप्रेट किया गया है।

एक गलत फॉर्मेटिंग मेथड चुनें:

toLocaleFormat() मेथड स्टैंडर्ड नहीं है! यह शायद जाना-पहचाना लगे क्योंकि यह एक पुरानी थर्ड-पार्टी लाइब्रेरी से है।

toLocaleDateString डॉक्स मेथड देखें। इसका व्यवहार Intl.DateTimeFormat के तहत डॉक्यूमेंट किया गया है।

आउटपुट में क्या शामिल होगा?

var date = Date.UTC('2020-01-02T00:00')
console.log(date.toUTCString())

आपको TypeError: date.toUTCString is not a function मिलेगा, क्योंकि Date.UTC() मिलीसेकंड में एक पूर्णांक (integer) लौटाता है, न कि कोई date instance।

आउटपुट में क्या शामिल होगा?

const d = Date.UTC(2020, 0, 1)
console.log(d)

हेल्पर मेथड Date.UTC कोई date instance वापस नहीं करता है। यह मिलीसेकंड में एक पूर्णांक (integer) वापस करता है।

आउटपुट में क्या शामिल होगा?

// Assume local TZ is -07:00
const d = new Date(Date.UTC(2020, 0, 1))
console.log(d.getTimezoneOffset())

तारीखें (Dates) स्वाभाविक रूप से स्थानीय समय (local time) में दिखाई जाएंगी, जिसमें .getTimezoneOffset() (प्रभावी रूप से) अपरिवर्तित रहता है।

Date इंस्टेंस टाइमज़ोन डेटा स्टोर नहीं करते हैं। वे Unix Epoch (1 जनवरी, 1970) से अब तक के मिलीसेकंड्स की संख्या स्टोर करते हैं। Date String की पार्सिंग और रेंडरिंग के दौरान टाइमज़ोन का ध्यान रखा जाता है। डिफ़ॉल्ट डिस्प्ले व्यवहार सिस्टम या ब्राउज़र की लोकेल सेटिंग्स के आधार पर स्वचालित रूप से निर्धारित होता है।

आउटपुट में क्या शामिल होगा?

const d = new Date(2020, 0, 1)
d.setDate(1)
console.log(d)

.setDate() मेथड दिए गए इंस्टेंस के वर्तमान महीने के आधार पर महीने का दिन (day of the month) सेट करता है।

यदि उपलब्ध दिनों की संख्या के बाहर कोई वैल्यू दी जाती है, तो डेट इंस्टेंस की महीने वाली वैल्यू अपने आप एडजस्ट हो जाएगी (जैसे जनवरी में setDate(32) करने पर यह 1 फरवरी के रूप में कैलकुलेट होगा।)

आउटपुट में क्या शामिल होगा?

const d = new Date(2020, 0, 1)
d.setMonth(1)
console.log(d)

.setMonth() मेथड दिए गए date instance का महीना सेट करता है।

महीने का argument zero-based होता है, जिसकी रेंज 0-11 होती है (पश्चिमी कैलेंडर के अनुसार)।

आउटपुट में क्या शामिल होगा?

const d = new Date(2020, 0, 1)
d.setMonth(12)
console.log(d)

.setMonth() मेथड दिए गए डेट इंस्टेंस का महीना सेट करता है।

month तर्क (argument) ज़ीरो-बेस्ड होता है, जिसमें 0-11 की रेंज में 12 मान होते हैं (पश्चिमी कैलेंडर के अनुसार)।

यहाँ हम देखते हैं कि वर्ष को 2021 में एडजस्ट किया गया है, क्योंकि setMonth(12) का मान 11 (दिसंबर) से 1 अधिक है।

आउटपुट में क्या शामिल होगा?

const d = new Date(2020, 0, 1)
d.setMonth(13)
console.log(d)

.setMonth() मेथड दिए गए date instance का महीना सेट करता है।

महीने का argument zero-based होता है, जिसकी रेंज 0-11 होती है (पश्चिमी कैलेंडर के अनुसार)।

यहाँ हम देखते हैं कि महीना और साल February 2021 में एडजस्ट हो गया है, क्योंकि setMonth(13) की वैल्यू 11 (December) से 2 ज़्यादा है।

आउटपुट में क्या शामिल होगा?

const d = new Date(2020, 0, 1)
d.setMonth(-1)
console.log(d)

.setMonth() मेथड दिए गए डेट इंस्टेंस का महीना सेट करता है।

महीने का आर्गुमेंट जीरो-बेस्ड (zero-based) होता है, जिसकी रेंज 0-11 होती है (पश्चिमी कैलेंडर के अनुसार)।

यहाँ हम देखते हैं कि महीना और साल पीछे रोल होकर दिसंबर 2019 पर आ जाते हैं, क्योंकि setMonth(-1) की वैल्यू 0 (जनवरी) से कम है।