डेवलपर टूल · Unix टाइमस्टैम्प कन्वर्टर
ब्राउज़र दिनांक और अंतर्राष्ट्रीय के साथ एक युग को स्थानीय समय में कैसे परिवर्तित करता है
· यह काम किस प्रकार करता है
टाइम स्टाम्प्स जावास्क्रिप्ट ब्राउज़र-एपिस
ब्राउज़र कन्वर्टर के पास अपना कोई सर्वर क्लॉक या टाइम ज़ोन डेटाबेस नहीं होता है; यह Date ऑब्जेक्ट और आपके ऑपरेटिंग सिस्टम द्वारा समर्थित Intl API पर निर्भर करता है। यह पोस्ट उस पाइपलाइन और उसकी सीमाओं के बारे में बताती है।
ब्राउज़र को 'लोकल' कहां से मिलता है? - एक ही युग को एक ही कमरे में लैपटॉप और फोन पर अलग-अलग तरीके से दिखाया गया है
एक-दूसरे के बगल में दो डिवाइस एक युग को अलग-अलग तरीके से प्रस्तुत कर सकते हैं जब उनके कॉन्फ़िगर किए गए स्थानीय क्षेत्र भिन्न होते हैं। लैपटॉप और फोन के बीच पूर्णांक नहीं बदलता है; प्रत्येक ब्राउज़र एक ही इंस्टेंट बनाता है, फिर अपने स्वयं के वातावरण के लिए स्थानीय कैलेंडर फ़ील्ड प्रदान करता है। इसलिए "स्थानीय" पाठक का वर्णन करता है, न कि युग के अंदर की गई संपत्ति का।
ToolAcre स्थानीय पंक्ति को `Intl.DateTimeFormat().resolvedOptions().timeZone` के साथ लेबल करके उस निर्भरता को दृश्यमान बनाता है। एक स्क्रीनशॉट जो बताता है कि एक घड़ी का समय और एक सर्वर लॉग जो कहता है कि दूसरा, दोनों ही विश्वसनीय रीडिंग हो सकते हैं। पहले उनकी UTC पंक्तियों की तुलना करें; UTC आउटपुट से मेल खाने से पता चलता है कि अंतर्निहित इंस्टेंट के बजाय प्रेजेंटेशन अलग है।
दिनांक मिलीसेकंड लेती है - कंस्ट्रक्टर का अनुबंध, सेकंड को एक हजार से गुणा क्यों किया जाना चाहिए, और दिनांक किस सीमा का प्रतिनिधित्व कर सकता है
JavaScript `Date` युग से मिलीसेकंड प्राप्त करता है। ToolAcre का `fromEpoch` एक सेकंड इनपुट को 1,000 से गुणा करता है और ऑब्जेक्ट के निर्माण से पहले एक मिलीसेकंड इनपुट को अपरिवर्तित छोड़ देता है। वह रूपांतरण स्पष्ट है क्योंकि 1,717,243,200 को सीधे `new Date` में पास करने का मतलब 1970 के लगभग बीस दिन बाद होगा, जून 2024 नहीं।
कार्यान्वयन एक गैर-परिमित संख्या और स्वरूपण से पहले ±8.64×10¹⁵ मिलीसेकंड से अधिक किसी भी व्याख्या किए गए मान को अस्वीकार कर देता है। वह सीमा स्रोत में नामित दिनांक सीमा से आती है, डेटाबेस या ऑपरेटिंग-सिस्टम घड़ी से नहीं। चयनकर्ता को बदलने से मान सीमा पार जा सकता है, इसलिए एक त्रुटि आपको यह भी बताती है कि कौन सी इकाई लागू की गई थी।
UTC एक्सेसर्स बनाम स्थानीय एक्सेसर्स - getUTCHours और getHours, और इंजन ऑफसेट कैसे लागू करता है
ToolAcre `getUTCHours` और `getHours` वाले फ़ील्ड नहीं निकालता; रूपरेखा की सहायक शब्दावली कार्यान्वयन से अधिक विशिष्ट है। यह `Intl.DateTimeFormat` को दिनांक को एक बार `timeZone: "UTC"` के साथ और एक बार ज़ोन ओवरराइड के बिना प्रारूपित करने के लिए कहता है। दोनों कॉलों को समान मिलीसेकंड मान प्राप्त होता है, इसलिए कोई भी ईवेंट को स्थानांतरित नहीं कर सकता है।
डिबगिंग करते समय वह अंतर मायने रखता है। यदि सेकंड और मिलीसेकंड पंक्तियाँ निर्माता से सहमत हैं लेकिन स्थानीय लेबल आपको आश्चर्यचकित करता है, तो युग में घंटे जोड़ने के बजाय ब्राउज़र क्षेत्र का निरीक्षण करें। मैनुअल ऑफसेट अंकगणित एक अलग क्षण बनाएगा और फिर फ़ॉर्मेटर को स्थानीय नियमों को फिर से लागू करने देगा, जिससे क्लासिक डबल-एडजस्टमेंट त्रुटि उत्पन्न होगी।
UTC और स्थानीय स्वरूपण इंजन से एक दिनांक की दो रीडिंग मांगता है
कन्वर्टर यह साबित कर सकता है कि वह ब्राउज़र से `resolvedOptions().timeZone` मांगता है; यह साबित नहीं कर सकता कि किसी विशेष इंजन ने ऑपरेटिंग सिस्टम, बंडल किए गए डेटा या किसी अन्य प्लेटफ़ॉर्म परत से हर समय-क्षेत्र नियम प्राप्त किया है या नहीं। स्रोत जानबूझकर उस मशीनरी को इंजन की ज़िम्मेदारी के रूप में मानता है और ज़ोन क्वेरी विफल होने पर "स्थानीय समय" वाक्यांश पर वापस आ जाता है।
यह साक्ष्य सीमा उपयोगी है. परिणाम में नामित क्षेत्र ब्राउज़र की वर्तमान पसंद की पहचान करता है, लेकिन यह समय-क्षेत्र डेटाबेस के लिए संस्करण रिपोर्ट नहीं है। यदि दो वातावरण किसी पुरानी तारीख पर असहमत हैं, तो ब्राउज़र, ऑपरेटिंग सिस्टम और प्रदर्शित क्षेत्र को रिकॉर्ड करें। कन्वर्टर अवलोकन की आपूर्ति करता है; यह Intl के पीछे डेटा पैकेज का निदान नहीं करता है।
ब्राउज़र एक स्थानीय क्षेत्र की रिपोर्ट करता है, जबकि इसका नियम स्रोत एक कार्यान्वयन विवरण बना रहता है
ISO पंक्ति के लिए, `toISOString()` अनुवर्ती Z और तीन भिन्नात्मक अंकों के साथ एक UTC स्ट्रिंग की आपूर्ति करता है। मानव-पठनीय UTC और स्थानीय पंक्तियाँ संख्यात्मक वर्ष, संक्षिप्त महीना, दो अंकों का दिन और 24-घंटे की घड़ी के साथ एक अंग्रेजी ग्रेट ब्रिटेन फ़ॉर्मेटर का उपयोग करती हैं। फ़ॉर्मेटर `shortOffset` का भी अनुरोध करता है, जिससे प्रत्येक रेंडर पंक्ति का लागू ऑफसेट हिस्सा बन जाता है।
वे विकल्प बताते हैं कि कंसोल से `Date.toString()` की प्रतिलिपि बनाना समतुल्य प्रमाण क्यों नहीं है। इसका सटीक गद्य स्थानीय-निर्भर है और इस टूल के आउटपुट अनुबंध से बाहर है। ToolAcre अपने प्रदर्शन विकल्पों को ठीक करता है, जबकि वास्तविक स्थानीय क्षेत्र को बदलने की अनुमति देता है। जब किसी अन्य सिस्टम को स्थिर मशीन-पठनीय तुलना की आवश्यकता हो तो ISO मान की प्रतिलिपि बनाएँ।
कार्यान्वित उदाहरण: एक युग, तीन आउटपुट - एक UTC ISO स्ट्रिंग, एक स्थानीय रूप से स्वरूपित समय और getTimezoneOffset से मिनटों में ऑफसेट
1,717,243,200 दर्ज करें और सेकंड चुनें। गुणन 1,717,243,200,000 मिलीसेकंड उत्पन्न करता है, जिसे परीक्षण `2024-06-01T12:00:00.000Z` के रूप में स्थापित करते हैं। UTC पंक्ति स्वरूपित होती है जो UTC में तुरंत बदल जाती है; स्थानीय पंक्ति ब्राउज़र ज़ोन में समान दिनांक को प्रारूपित करती है और उस ज़ोन को नाम देती है। सेकंड और मिलीसेकंड पंक्तियाँ दोनों संख्यात्मक रूपों को सुरक्षित रखती हैं।
सटीक स्थानीय घड़ी और ऑफसेट को उदाहरण चलाने वाले डिवाइस से पढ़ा जाना चाहिए; इसे यहां प्रकाशित करने से ऐसा प्रतीत होगा कि प्रत्येक पाठक का क्षेत्र एक ही है। यही कारण है कि यह काम किया गया चेक अपने निश्चित परिणाम के रूप में ISO दावे का उपयोग करता है और स्थानीय आउटपुट को एक देखे गए मान के रूप में मानता है। यदि ISO भिन्न है, तो स्थान सेटिंग्स की जांच करने से पहले चयनित इकाई पर दोबारा जाएँ।
व्यावहारिक उदाहरण: एक युग, तीन आउटपुट ToolAcre वास्तव में उजागर होते हैं
यह मार्ग किसी मनमाने तीसरे क्षेत्र के लिए चयनकर्ता की पेशकश नहीं करता है। `formatInZone` किसी ज़ोन को आंतरिक रूप से स्वीकार कर सकता है, लेकिन पैनल इसे UTC और केवल ब्राउज़र डिफ़ॉल्ट के लिए कहता है। एक लेख में दावा किया गया है कि उपयोगकर्ता टोक्यो, नैरोबी या टोरंटो का चयन कर सकते हैं, जो एक ऐसे इंटरफ़ेस का वर्णन करेगा जो शिप नहीं किया गया है, भले ही अंतर्राष्ट्रीय कहीं और इस तरह के प्रारूपण का समर्थन कर सकता है।
यह कैलेंडर चयन, स्थान चयन या समय-क्षेत्र डेटाबेस संशोधन को भी उजागर नहीं करता है। क्रॉस-ऑफ़िस रूपांतरण के लिए, युग को एंकर के रूप में बनाए रखें और एक टूल का उपयोग करें जिसका दस्तावेज़ इंटरफ़ेस लक्ष्य क्षेत्र का नाम देता है। यहां संक्षिप्त वादा मूल्यवान है: स्थानीय वातावरण के साथ सार्वभौमिक UTC, जिसमें कोई छिपा हुआ सर्वर यह तय नहीं करता कि स्थानीय का क्या अर्थ है।
टेकअवे: आपका ब्राउज़र घड़ी और एटलस है - और Unix टाइमस्टैम्प कन्वर्टर इसका उपयोग सर्वर के बिना UTC और स्थानीय को एक साथ दिखाने के लिए कैसे करता है
ब्राउज़र अंकगणित इंजन और प्रस्तुति वातावरण दोनों के रूप में कार्य करता है। ToolAcre इकाई का समाधान करता है, एक दिनांक बनाता है, एक विहित ISO मान मांगता है, फिर UTC और स्थानीय रीडिंग को एक साथ प्रारूपित करता है। उन चरणों के लिए किसी दूरस्थ रूपांतरण सेवा की आवश्यकता नहीं है, और प्रदर्शित इकाई समीक्षा के लिए Factor-of-1,000 निर्णय उपलब्ध रखती है।
जब आउटपुट सभी डिवाइसों में भिन्न होते हैं, तो उस क्रम में ISO पंक्ति, यूनिट नोट और नामित स्थानीय क्षेत्र की तुलना करें। वे तीन अवलोकन तत्काल, पैमाने और प्रस्तुति को अलग करते हैं। स्थानीय घड़ी को सत्य का स्रोत मानने से तीनों प्रश्न एक में सिमट जाते हैं और जब भी दर्शक क्षेत्र बदलता है तो सही रूपांतरण गलत दिखने लगता है।