JavaScript में समय को बिना आश्चर्य के कैसे फॉर्मैट और कन्वर्ट करें: टाइमस्टैम्प, ISO स्ट्रिंग्स, समय क्षेत्र, DST, पार्सिंग नियम और भरोसेमंद पैटर्न सीखें।

JavaScript समय से जुड़ी बग्स अक्सर सीधे "घड़ी गलत है" जैसी नहीं दिखतीं। वे छोटे-छोटे विचलनों के रूप में आती हैं: आपकी मशीन पर सही तारीख सहकर्मी की मशीन पर गलत दिखना, एक API प्रतिक्रिया जो ठीक लगती है लेकिन किसी अलग समय क्षेत्र में रेंडर होने पर उलझन पैदा कर देती है, या मौसमी समय बदलने के आसपास "एक कम" वाली रिपोर्ट।
आप आमतौर पर इनमें से एक (या अधिक) नोटिस करेंगे:
+02:00) आपकी उम्मीद से अलग है।एक बड़ी समस्या यह है कि शब्द समय अलग-अलग अवधारणाओं को दर्शा सकता है:
JavaScript का इन-बिल्ट Date इन सभी को कवर करने की कोशिश करता है, लेकिन यह मुख्यतः एक विश्वव्यापी पल को दर्शाता है और साथ ही आपको स्थानीय प्रदर्शन की ओर धकेलता रहता है, जिससे अनजाने में परिवर्तनों की संभावना बढ़ जाती है।
यह मार्गदर्शिका व्यवहारिक है: कैसे ब्राउज़र और सर्वर में पूर्वानुमेय रूपांतरण करें, सुरक्षित प्रारूप (जैसे ISO 8601) कैसे चुनें, और क्लासिक जालें (सेकंड बनाम मिलीसेकंड, UTC बनाम स्थानीय, और पार्सिंग भिन्नताएँ) कैसे पहचानें। लक्ष्य अधिक सिद्धांत नहीं है—बल्कि कम "क्यों यह शिफ्ट हुआ?" के आश्चर्य।
JavaScript समय की बग्स अक्सर उन प्रतिनिधित्वों को मिलाने से शुरू होती हैं जो दिखने में आपस में इंटरचेन्ज़ेबल लगते हैं, पर वास्तव में नहीं होते।
1) एपॉक मिलीसेकंड (नंबर)
एक सादा नंबर जैसे 1735689600000 आमतौर पर "1970-01-01T00:00:00Z से मिलीसेकंड" होता है। यह एक विश्वव्यापी पल को दर्शाता है जिसमें कोई फॉर्मैटिंग या समय क्षेत्र संलग्न नहीं है।
2) Date ऑब्जेक्ट (एक पल के चारों ओर रैपर)
Date उसी तरह के पल को स्टोर करता है जैसा कि टाइमस्टैम्प करता है। भ्रम पैदा करने वाली बात: जब आप Date को प्रिंट करते हैं, तो JavaScript आपके पर्यावरण के स्थानीय नियमों का उपयोग करके उसे फॉर्मैट करता है जब तक आप अलग से न बताएँ।
3) स्वरूपित स्ट्रिंग (मानव-प्रदर्शन)
"2025-01-01", "01/01/2025 10:00", या "2025-01-01T00:00:00Z" जैसी स्ट्रिंग्स एक जैसी नहीं हैं। कुछ अस्पष्ट नहीं होते (ISO 8601 के साथ Z), कुछ लोकल पर निर्भर करते हैं, और कुछ में समय क्षेत्र शामिल नहीं होता।
एक ही पल अलग-अलग समय क्षेत्रों में अलग दिख सकता है:
const instant = new Date("2025-01-01T00:00:00Z");
instant.toLocaleString("en-US", { timeZone: "UTC" });
// "1/1/2025, 12:00:00 AM"
instant.toLocaleString("en-US", { timeZone: "America/Los_Angeles" });
// "12/31/2024, 4:00:00 PM" (पिछला दिन)
एक एकल आंतरिक प्रतिनिधित्व चुनें (आम तौर पर एपॉक मिलीसेकंड या UTC ISO 8601) और इसे अपने ऐप और APIs में लगातार उपयोग करें। Date और स्वरूपित स्ट्रिंग्स के बीच रूपांतरण केवल सीमाओं पर करें: इनपुट पार्सिंग और UI प्रदर्शन में।
“टाइमस्टैम्प” आमतौर पर एपॉक समय (Unix time) का मतलब होता है: 1970-01-01 00:00:00 UTC से बीते समय की गिनती। पकड़ यह है कि अलग‑अलग सिस्टम अलग ईकाइयों में गिनते हैं।
JavaScript का Date सबसे ज्यादा भ्रम का स्रोत है क्योंकि यह मिलीसेकंड उपयोग करता है। कई APIs, डेटाबेस, और लॉग्स सेकंड में होते हैं।
17040672001704067200000एक ही क्षण, पर मिलीसेकंड वर्ज़न में तीन अतिरिक्त अंक होते हैं।
इकाइयाँ स्पष्ट करने के लिए स्पष्ट गुणा/विभाजन का प्रयोग करें:
// seconds -> Date
const seconds = 1704067200;
const d1 = new Date(seconds * 1000);
// milliseconds -> Date
const ms = 1704067200000;
const d2 = new Date(ms);
// Date -> seconds
const secondsOut = Math.floor(d2.getTime() / 1000);
// Date -> milliseconds
const msOut = d2.getTime();
Date() में पास करनायह दिखने में सही लगता है, लेकिन गलत है जब ts सेकंड में है:
const ts = 1704067200; // seconds
const d = new Date(ts); // WRONG: treated as milliseconds
परिणाम 1970 का साल होगा, क्योंकि 1,704,067,200 मिलीसेकंड केवल एपॉक के लगभग 19 दिनों बाद था।
जब आप सुनिश्चित न हों कि किस इकाई में है, तो तेज़ गार्डरैस जोड़ें:
function asDateFromUnknownEpoch(x) {
// crude heuristic: seconds are ~1e9-1e10, milliseconds are ~1e12-1e13
if (x < 1e11) return new Date(x * 1000); // assume seconds
return new Date(x); // assume milliseconds
}
const input = Number(valueFromApi);
console.log({ input, digits: String(Math.trunc(input)).length });
console.log('as ISO:', asDateFromUnknownEpoch(input).toISOString());
यदि "digits" की गिनती ~10 है, तो संभवतः यह सेकंड हैं। यदि ~13 है, तो मिलीसेकंड हैं। डिबग करते समय toISOString() भी प्रिंट करें: यह अस्पष्ट नहीं है और इकाई की गलती तुरंत दिखने में मदद करता है।
JavaScript का Date भ्रमित कर सकता है क्योंकि यह एक ही पल को स्टोर करता है, पर जब आप उस पल को स्थानीय समय (कंप्यूटर/सर्वर सेटिंग्स पर आधारित) बनाम UTC में फॉर्मैट करने के लिए कहते हैं तो वह अलग-अलग तरीके से प्रस्तुत कर सकता है।
आंतरिक रूप से, Date मूलतः "यूनिक्स एपॉक के बाद मिलीसेकंड" होता है। वह संख्या UTC में एक पल का प्रतिनिधित्व करती है। वह "शिफ्ट" तब होती है जब आप उस पल को स्थानीय समय के रूप में फॉर्मैट करना कहें।
कई Date API में लोकल और UTC वैरिएंट दोनों होते हैं। वे एक ही पल के लिए अलग‑अलग संख्याएँ लौटाते हैं:
const d = new Date('2025-01-01T00:30:00Z');
d.getHours(); // hour in *local* time zone
d.getUTCHours(); // hour in UTC
d.toString(); // local time string
d.toISOString(); // UTC (always ends with Z)
अगर आपकी मशीन न्यूयॉर्क (UTC-5) में है, तो वह UTC समय स्थानीय रूप में पिछले दिन का "19:30" दिखा सकता है। एक सर्वर जो UTC पर सेट है वह "00:30" दिखाएगा। एक ही पल, अलग‑अलग प्रदर्शन।
लॉग अक्सर Date#toString() का उपयोग करते हैं या Date को इम्प्लिसिटली इंटरपोलेट करते हैं, जो पर्यावरण के लोकल समय क्षेत्र का उपयोग करता है। इसका मतलब है कि एक ही कोड आपके लैपटॉप, CI और प्रोडक्शन पर अलग टाइमस्टैम्प प्रिंट कर सकता है।
समय को UTC में स्टोर और ट्रांसमिट करें (उदा., एपॉक मिलीसेकंड या ISO 8601 के toISOString() से)। डिस्प्ले केवल तभी लोकल में करें जब वह UI के लिए आवश्यक हो:
toISOString() या एपॉक मिलीसेकंड पास करेंIntl.DateTimeFormat का उपयोग करके फॉर्मैट करेंअगर आप जल्दी ऐप बना रहे हैं, तो यह अपने जनरेटेड API कॉन्ट्रैक्ट में पहले से ही शामिल कर लें: फ़ील्ड्स को स्पष्ट रूप से नाम दें (createdAtMs, createdAtIso) और सर्वर (Go + PostgreSQL) तथा क्लाइंट (React) दोनों में यह स्पष्ट रखें कि हर फ़ील्ड का क्या प्रतिनिधित्व है।
अगर आपको ब्राउज़र, सर्वर और डेटाबेस के बीच तारीख/समय भेजना है, तो ISO 8601 स्ट्रिंग्स डिफ़ॉल्ट रूप में सबसे सुरक्षित हैं। वे स्पष्ट हैं, व्यापक रूप से समर्थित हैं, और (सबसे महत्वपूर्ण) समय क्षेत्र की जानकारी साथ लाते हैं।
दो अच्छे इंटरचेंज फॉर्मेट:
2025-03-04T12:30:00Z2025-03-04T12:30:00+02:00"Z" का अर्थ क्या है?
Z का मतलब Zulu time, यानी UTC। तो 2025-03-04T12:30:00Z का अर्थ है "UTC में 12:30"।
+02:00 जैसे ऑफ़सेट कब मायने रखते हैं?
ऑफ़सेट महत्वपूर्ण होते हैं जब कोई इवेंट स्थानीय समय संदर्भ से जुड़ा हो (मुलाकातें, बुकिंग्स, स्टोर खुलने का समय)। 2025-03-04T12:30:00+02:00 वह पल बताता है जो UTC से दो घंटे आगे है, और यह 2025-03-04T12:30:00Z के बराबर नहीं है।
03/04/2025 जैसी स्ट्रिंग्स जाल हैं: क्या यह मार्च 4 है या अप्रैल 3? अलग‑अलग उपयोगकर्ता और पर्यावरण इसे अलग तरीके से इंटरप्रेट करते हैं। 2025-03-04 (ISO तिथि) या पूरा ISO datetime प्राथमिकता दें।
const iso = "2025-03-04T12:30:00Z";
const d = new Date(iso);
const back = d.toISOString();
console.log(iso); // 2025-03-04T12:30:00Z
console.log(back); // 2025-03-04T12:30:00.000Z
यह "राउंड‑ट्रिप" व्यवहार API के लिए यही चाहिए: सुसंगत, पूर्वानुमेय और समय क्षेत्र‑सचेत।
Date.parse() उपयोगी लगता है: उसे एक स्ट्रिंग दें, एक टाइमस्टैम्प मिल जाता है। समस्या यह है कि ISO 8601 के अलावा किसी भी अनिश्चित फ़ॉर्मेट के लिए पार्सिंग ब्राउज़र हीरिस्टिक्स पर निर्भर कर सकती है। ये हीरिस्टिक्स इंजन और संस्करणों के बीच अलग रही हैं, जिसका मतलब है कि एक ही इनपुट अलग जगहों पर अलग तरीके से पार्स हो सकता है (या नहीं भी हो सकता)।
Date.parse() क्यों भिन्न हो सकता हैJavaScript केवल ISO 8601–स्टाइल स्ट्रिंग्स के लिए पार्सिंग को विश्वसनीय रूप से मानकीकृत करता है (और तब भी, समय क्षेत्र जैसे विस्तार मायने रखते हैं)। "फ्रेंडली" फॉर्मेट्स—जैसे "03/04/2025", "March 4, 2025", या "2025-3-4"—के लिए ब्राउज़र निम्न कर सकते हैं:
यदि आप सटीक स्ट्रिंग आकार की भविष्यवाणी नहीं कर सकते, तो परिणाम की भविष्यवाणी भी नहीं कर सकते।
YYYY-MM-DDएक सामान्य जाल है "YYYY-MM-DD" (उदा., "2025-01-15") का सरल रूप। कई डेवलपर्स उम्मीद करते हैं कि इसे लोकल मध्यरात्रि के रूप में इंटरप्रेट किया जाएगा। व्यावहारिक रूप से, कुछ पर्यावरण इसे UTC मध्यरात्रि के रूप में मानते हैं।
यह फर्क मायने रखता है: UTC मध्यरात्रि जब लोकल समय में बदली जाती है तो यह नकारात्मक समय क्षेत्रों (उदा., अमेरिका) में पिछला दिन बन सकता है या घंटे बदले हुए दिख सकते हैं। यह "क्यों मेरी तिथि एक दिन अलग है?" वाली बग्स का आसान रास्ता है।
सर्वर/API इनपुट के लिए:
2025-01-15T13:45:00Z या 2025-01-15T13:45:00+02:00।"YYYY-MM-DD") के रूप में रखें और तब तक Date में परिवर्तित न करें जब तक आप इरादा (समय क्षेत्र) न निर्धारित कर लें।उपयोगकर्ता इनपुट के लिए:
03/04/2025 स्वीकार न करें जब तक आपकी UI अर्थ को बाध्य न करे।Date.parse() पर भरोसा करने की बजाय कि "यह समझ लेगा", इन पैटर्नों में से किसी एक को चुनें:
new Date(year, monthIndex, day) का प्रयोग करें)।जब समय डेटा महत्वपूर्ण हो, तो "मेरी मशीन पर पार्स हो गया" पर्याप्त नहीं है—अपने पार्सिंग नियम स्पष्ट और सुसंगत बनाएं।
यदि आपका लक्ष्य "लोगों को उम्मीद के अनुरूप तारीख/समय दिखाना" है, तो JavaScript में सबसे अच्छा टूल Intl.DateTimeFormat है। यह उपयोगकर्ता की लोकैल नियमों (ऑर्डर, विभाजक, महीने के नाम) का उपयोग करता है और month + '/' + day जैसे नाजुक मैन्युअल संयोजन से बचाता है।
मैन्युअल फॉर्मैटिंग अक्सर US‑स्टाइल आउटपुट हार्ड‑कोड कर देती है, लीडिंग ज़ीरो भूल जाती है, या 24/12‑घंटे में भ्रम पैदा करती है। Intl.DateTimeFormat यह भी स्पष्ट करता है कि आप किस समय क्षेत्र में दिखा रहे हैं—महत्वपूर्ण जब आपका डेटा UTC में स्टोर है पर UI उपयोगकर्ता के स्थानीय समय को दिखाए।
"अच्छा दिखाएं" के लिए dateStyle और timeStyle सबसे सरल हैं:
const d = new Date('2025-01-05T16:30:00Z');
// User’s locale + user’s local time zone
console.log(new Intl.DateTimeFormat(undefined, {
dateStyle: 'medium',
timeStyle: 'short'
}).format(d));
// Force a specific time zone (great for event times)
console.log(new Intl.DateTimeFormat('en-GB', {
dateStyle: 'full',
timeStyle: 'short',
timeZone: 'UTC'
}).format(d));
यदि आपको निश्चित घंटे‑साइकल चाहिए (उदा., सेटिंग में टॉगल), तो hour12 का उपयोग करें:
console.log(new Intl.DateTimeFormat('en-US', {
hour: 'numeric',
minute: '2-digit',
hour12: true
}).format(d));
अपनी UI में हर "टाइमस्टैम्प प्रकार" (संदेश समय, लॉग एंट्री, इवेंट स्टार्ट) के लिए एक फॉर्मैटिंग फ़ंक्शन चुनें, और timeZone निर्णय जानबूझकर रखें:
इससे आपको सुसंगत, लोकैल‑फ्रेंडली आउटपुट मिलता है बिना नाजुक कस्टम फॉर्मैट स्ट्रिंग्स संभालने के।
Daylight Saving Time (DST) वह समय है जब कोई समय зона अपना UTC ऑफ़सेट (आम तौर पर एक घंटा) कुछ विशिष्ट तारीखों पर बदलती है। कठिनाई यह है कि DST केवल ऑफ़सेट नहीं बदलता—यह कुछ स्थानीय समयों के अस्तित्व को बदल देता है।
जब घड़ियाँ spring forward करती हैं, कुछ स्थानीय समय मौजूद ही नहीं होते। उदाहरण के लिए, कई क्षेत्रों में घड़ी 01:59 से सीधे 03:00 हो जाती है, इसलिए 02:30 स्थानीय समय “गायब” होता है।
जब घड़ियाँ fall back करती हैं, कुछ स्थानीय समय दो बार होते हैं। उदाहरण के लिए, 01:30 शिफ्ट से पहले और बाद में दो बार हो सकता है, जिसका अर्थ है कि वही वॉल‑क्लॉक समय दो अलग पलों का संदर्भ दे सकता है।
DST सीमाओं के आसपास ये बराबर नहीं होते:
यदि DST आज रात शुरू होता है, तो "कल सुबह 9:00" केवल 23 घंटे दूर हो सकता है। यदि DST आज रात समाप्त होता है, तो यह 25 घंटे दूर हो सकता है।
// Scenario: schedule “same local time tomorrow”
const d = new Date(2025, 2, 8, 9, 0); // Mar 8, 9:00 local
const plus24h = new Date(d.getTime() + 24 * 60 * 60 * 1000);
const nextDaySameLocal = new Date(d);
nextDaySameLocal.setDate(d.getDate() + 1);
// Around DST, plus24h and nextDaySameLocal can differ by 1 hour.
setHours आपको चकित कर सकता हैयदि आप date.setHours(2, 30, 0, 0) जैसी कोई चीज़ करते हैं किसी "spring forward" दिन पर, तो JavaScript इसे किसी वैध समय (अक्सर 03:30) पर सामान्य कर सकता है, क्योंकि 02:30 स्थानीय समय में मौजूद नहीं है।
setDate) का उपयोग करें बजाय मिलीसेकंड जोड़ने के।Z के साथ प्राथमिकता दें ताकि पल अस्पष्ट न रहे।एक आम बग का स्रोत है Date का उपयोग किसी ऐसी चीज़ के प्रतिनिधित्व के लिए जो कैलेंडर क्षण नहीं है।
एक टाइमस्टैम्प जवाब देता है "यह कब हुआ?" (एक विशिष्ट पल जैसे 2025-12-23T10:00:00Z)। एक ड्यूरेशन जवाब देती है "कितनी देर?" (जैसे "3 मिनट 12 सेकंड")। ये अलग अवधारणाएँ हैं, और इन्हें मिलाने से भ्रमित गणित और अप्रत्याशित समय क्षेत्र/DST प्रभाव आते हैं।
Date गलत टूल क्यों हैDate हमेशा एपॉक के सापेक्ष एक बिंदु को दर्शाता है। यदि आप "90 सेकंड" को Date के रूप में स्टोर करते हैं, तो आप वास्तव में "1970-01-01 में 90 सेकंड जोड़कर" स्टोर कर रहे हैं, किसी विशेष समय क्षेत्र में। इसे फॉर्मैट करने पर यह अचानक 01:01:30 दिखा सकता है, एक घंटे द्वारा शिफ्ट हो सकता है, या कोई अनचाही तारीख दिखा सकता है।
अवधियों के लिए, सादा नंबर पसंद करें:
HH:mm:ss में बदलनायहां एक सरल फॉर्मैटर है जो काउंटडाउन टाइमर और मीडिया लंबाई के लिए काम करता है:
function formatHMS(totalSeconds) {
const s = Math.max(0, Math.floor(totalSeconds));
const hh = String(Math.floor(s / 3600)).padStart(2, "0");
const mm = String(Math.floor((s % 3600) / 60)).padStart(2, "0");
const ss = String(s % 60).padStart(2, "0");
return `${hh}:${mm}:${ss}`;
}
formatHMS(75); // "00:01:15" (countdown timer)
formatHMS(5423); // "01:30:23" (media duration)
यदि आप मिनट से परिवर्तित कर रहे हैं, तो पहले गुणा करें (minutes * 60) और रेंडर करने तक मान को संख्या रखें।
जब आप JavaScript में समयों की तुलना करते हैं, तो सबसे सुरक्षित तरीका है संख्याओं की तुलना करना, न कि फॉर्मैटेड टेक्स्ट की। एक Date ऑब्जेक्ट मूलतः एक संख्यात्मक टाइमस्टैम्प (एपॉक मिलीसेकंड) का रैपर है, इसलिए आप चाहते हैं कि तुलना "नंबर बनाम नंबर" हो।
विश्वसनीय तुलना के लिए getTime() (या Date.valueOf() जो वही नंबर लौटाता है) का उपयोग करें:
const a = new Date('2025-01-10T12:00:00Z');
const b = new Date('2025-01-10T12:00:01Z');
if (a.getTime() < b.getTime()) {
// a is earlier
}
// Also works:
if (+a < +b) {
// unary + calls valueOf()
}
फॉर्मैटेड स्ट्रिंग्स जैसे "1/10/2025, 12:00 PM" की तुलना करने से बचें—वे लोकैल पर निर्भर होती हैं और सही क्रम में सॉर्ट नहीं होंगी। मुख्य अपवाद वही ISO 8601 स्ट्रिंग्स हैं जो एक ही फॉर्मेट और टाइमज़ोन में हों (उदा., सभी ...Z)—वे लेक्सिकोग्राफिक रूप से सॉर्टेबल होते हैं।
टाइम के आधार पर सॉर्टिंग आसान है यदि आप एपॉक मिलीसेकंड से सॉर्ट करें:
items.sort((x, y) => new Date(x.createdAt).getTime() - new Date(y.createdAt).getTime());
रेंज के भीतर आइटम फ़िल्टर करना भी यही विचार है:
const start = new Date('2025-01-01T00:00:00Z').getTime();
const end = new Date('2025-02-01T00:00:00Z').getTime();
const inRange = items.filter(i => {
const t = new Date(i.createdAt).getTime();
return t >= start && t < end;
});
"दिन की शुरुआत" इस बात पर निर्भर करती है कि आप लोकल समय या UTC का अर्थ रखते हैं:
// Local start/end of day
const d = new Date(2025, 0, 10); // Jan 10 in local time
const localStart = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);
const localEnd = new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999);
// UTC start/end of day
const utcStart = new Date(Date.UTC(2025, 0, 10, 0, 0, 0, 0));
const utcEnd = new Date(Date.UTC(2025, 0, 10, 23, 59, 59, 999));
एक परिभाषा जल्दी चुनें और अपनी तुलना तथा रेंज लॉजिक में उस पर टिके रहें।
समय की बग्स तब तक यादृच्छिक लगती हैं जब तक आप यह निर्धारित न कर लें आपके पास क्या है (टाइमस्टैम्प? स्ट्रिंग? Date?) और कहां शिफ्ट आ रही है (पार्सिंग, समय क्षेत्र रूपांतरण, फॉर्मैटिंग)।
शुरू करने के लिए उसी मान को तीन अलग तरीकों से लॉग करें। यह जल्दी बताता है कि समस्या सेकंड बनाम मिलीसेकंड है, लोकल बनाम UTC है, या स्ट्रिंग पार्सिंग है।
console.log('raw input:', input);
const d = new Date(input);
console.log('toISOString (UTC):', d.toISOString());
console.log('toString (local):', d.toString());
console.log('timezone offset (min):', d.getTimezoneOffset());
क्या देखें:
toISOString() बेहद गलत है (उदा., 1970 का वर्ष या बहुत दूर भविष्य), तो शक करें सेकंड बनाम मिलीसेकंड।toISOString() सही दिखता है पर toString() "शिफ्ट" है, तो आप लोकल टाइमज़ोन प्रदर्शन देख रहे हैं।getTimezoneOffset() तारीख के अनुसार बदलता है, तो आप डेलाइट सेविंग टाइम पार कर रहे हैं।कई "मेरी मशीन पर काम कर रहा है" रिपोर्ट केवल अलग‑अलग पर्यावरण डिफ़ॉल्ट्स होते हैं।
console.log(Intl.DateTimeFormat().resolvedOptions());
console.log('TZ:', process.env.TZ);
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone);
यदि आपका सर्वर UTC पर चलता है पर आपका लैपटॉप लोकल ज़ोन पर, तो फॉर्मैटेड आउटपुट अलग होगा जब तक आप स्पष्ट timeZone न पास करें।
DST सीमाओं और "एज" समयों के आसपास यूनिट टेस्ट बनाएं:
23:30 → 00:30 क्रॉसओवरयदि आप तेज़ी से इटरेट कर रहे हैं, तो इन्हें अपनी स्कैफ़ोल्डिंग का हिस्सा बना दें। उदाहरण के लिए, React + Go ऐप जनरेट करते समय आप छोटी "टाइम कॉन्ट्रैक्ट" टेस्ट सूट जोड़ सकते हैं (API पेलोड उदाहरण + पार्स/फॉर्मैटिंग आश्वासन) ताकि रेग्रेशन डिप्लॉयमेंट से पहले पकड़े जाएँ।
"2025-03-02 10:00" जैसी अस्पष्ट स्ट्रिंग्स न हों।locale और (जब आवश्यक हो) timeZone निर्दिष्ट करे।JavaScript में विश्वसनीय समय हैंडलिंग मुख्यतः "स्रोत‑सत्य" चुनने और स्टोरेज से डिस्प्ले तक लगातार रहने के बारे में है।
UTC में स्टोर और कंप्यूट करें। उपयोगकर्ता‑फेस के लिए लोकल समय को केवल एक प्रस्तुति विवरण समझें।
सिस्टमों के बीच तारीखों को ISO 8601 स्ट्रिंग्स के साथ स्पष्ट ऑफ़सेट (पसंदीदा Z) के रूप में ट्रांसमिट करें। अगर आपको संख्यात्मक एपॉक्स भेजने हैं, तो यूनिट का दस्तावेज़ीकरण करें और एकरूप रखें (JS में मिलीसेकंड आम डिफ़ॉल्ट है)।
इंसानों के लिए फॉर्मैट करने में Intl.DateTimeFormat (या toLocaleString) का उपयोग करें, और जब आपको निर्णायक आउटपुट चाहिए तो स्पष्ट timeZone पास करें (उदा., हमेशा UTC दिखाना या किसी विशेष व्यावसायिक क्षेत्र को दिखाना)।
Z के साथ ISO 8601 पसंद करें (उदा., 2025-12-23T10:15:00Z)। यदि एपॉक्स का उपयोग कर रहे हैं, तो फ़ील्ड नाम जैसे createdAtMs दें ताकि यूनिट स्पष्ट हो।अगर आपको recurring events, जटिल समय ज़ोन नियम, DST‑सुरक्षित अंकगणित ("कल उसी स्थानीय समय"), या असंगत इनपुट्स से बहुत पार्सिंग करनी है तो समर्पित डेट‑टाइम लाइब्रेरी पर विचार करें। मूल्य स्पष्ट APIs और कम एज‑केस बग्स में है।
अगर आप अधिक गहराई में जाना चाहते हैं, तो /blog पर और समय‑संबंधी मार्गदर्शिकाएँ पढ़ें। यदि आप टूलिंग या सपोर्ट विकल्पों का मूल्यांकन कर रहे हैं, तो देखें /pricing।