2 पॉइंट द्वारा GN⁺ 2025-01-31 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • JavaScript Temporal रिलीज़ शुरू

    • नए JavaScript Temporal object का implementation ब्राउज़र के experimental release में शामिल होना शुरू हो गया है। यह web developers के लिए बड़ी खबर है, और JavaScript में तारीख और समय को संभालना काफी सरल और आधुनिक होने वाला है।
    • scheduling, internationalization, और time-sensitive data पर निर्भर applications built-in features का उपयोग करके कुशल, सटीक और एकसमान date, time, duration, और calendar का उपयोग कर सकेंगी।
    • अभी stable cross-browser support तक पहुंचने में समय है, और implementation के विकसित होने के साथ बदलाव हो सकते हैं, लेकिन अभी के Temporal को देखा जा सकता है और समझा जा सकता है कि यह क्यों ज़रूरी है और कौन-सी समस्याएँ हल करता है।
    • MDN में इस सप्ताह 270 पेज से अधिक का Temporal documentation जोड़ा गया है, जिसमें विस्तृत विवरण और examples शामिल हैं.
  • JavaScript Temporal क्या है?

    • Temporal को समझने के लिए JavaScript के Date object को देखा जा सकता है। जब JavaScript 1995 में बनाई गई थी, तब Date object को Java की शुरुआती त्रुटिपूर्ण java.util.Date implementation से कॉपी किया गया था।
    • Java ने 1997 में इस implementation को बदल दिया, लेकिन JavaScript लगभग 30 साल से उसी API में फंसी हुई है।
    • JavaScript के Date object की मुख्य समस्याएँ यह हैं कि यह केवल user के local time और UTC को support करता है, और timezone support नहीं है। इसके अलावा, parsing behavior बहुत अविश्वसनीय है, और Date स्वयं mutable है, जिससे ऐसे bugs पैदा हो सकते हैं जिन्हें ट्रैक करना मुश्किल होता है।
    • इन सभी समस्याओं की वजह से JavaScript में तारीख और समय को संभालना जटिल और bug-prone हो जाता है। अधिकतर developers अपनी applications में तारीख और समय को बेहतर ढंग से संभालने के लिए Moment.js और date-fns जैसी libraries पर निर्भर रहते हैं।
    • Temporal को Date object का पूरी तरह से स्थान लेने के लिए डिज़ाइन किया गया है, ताकि date और time management विश्वसनीय और अनुमानित बन सके। Temporal timezone और calendar representation को support करता है, और conversion, comparison, calculation, formatting आदि के लिए कई built-in methods जोड़ता है।
  • मुख्य अवधारणाएँ

    • Temporal में मुख्य अवधारणाएँ हैं instant (इतिहास में एक अद्वितीय बिंदु), wall-clock time (स्थानीय समय), और duration। इन अवधारणाओं को संभालने के लिए API की संरचना इस प्रकार है:
      • duration: Temporal.Duration दो समय बिंदुओं के बीच का अंतर
      • समय बिंदु:
        • अद्वितीय समय बिंदु:
          • timestamp के रूप में: Temporal.Instant
          • timezone के साथ date-time: Temporal.ZonedDateTime
        • timezone से स्वतंत्र date/time ("Plain"):
          • पूरी date और time: Temporal.PlainDateTime
          • केवल date: Temporal.PlainDate
          • year और month: Temporal.PlainYearMonth
          • month और day: Temporal.PlainMonthDay
          • केवल time: Temporal.PlainTime
      • वर्तमान: अलग-अलग class instances या किसी विशेष format में current time पाने के लिए Temporal.now का उपयोग
  • Temporal उदाहरण

    • Temporal के कुछ सबसे बुनियादी उपयोगों में ISO string के रूप में वर्तमान तारीख और समय प्राप्त करना शामिल है। अब कई methods में timezone दिया जा सकता है, जिससे जटिल calculations खुद करने की ज़रूरत नहीं रहती।
    • अलग-अलग calendars के साथ काम करना भी सरल हो गया है, इसलिए Gregorian calendar के अलावा अन्य calendar systems (जैसे Hebrew, Chinese, Islamic) में तारीख बनाई जा सकती है।
    • Unix timestamp के साथ काम करना एक बहुत सामान्य use case है, क्योंकि कई systems (API, database) समय को दर्शाने के लिए इस format का उपयोग करते हैं।
    • compare() method durations को सुंदर और कुशल तरीके से sort करने देता है।
  • Temporal आज़माना और ब्राउज़र समर्थन

    • support धीरे-धीरे experimental browser releases में शामिल होना शुरू हुआ है, और Firefox के पास फिलहाल सबसे परिपक्व implementation है।
    • Firefox में Temporal, javascript.options.experimental.temporal preference के पीछे Nightly version में built-in हो रहा है।
    • experimental implementation के आने के साथ, Temporal को आज़माने और JavaScript में तारीख और समय को संभालने के आधुनिक तरीके से परिचित होने का यह अच्छा समय है।
  • आभार

    • इस विषय पर किए गए काम के लिए Eric Meyer का धन्यवाद। Eric को mdn/content के fork में browser compatibility data का documentation करने और docs को व्यवस्थित करने में लगभग 4 साल हो चुके हैं।
    • Joshua Chen ने Eric से जिम्मेदारी संभालकर MDN documentation के लिए pull request तैयार किया।
    • Firefox Temporal implementation पर किए गए काम के लिए André Bargull का धन्यवाद।

1 टिप्पणियां

 
GN⁺ 2025-01-31
Hacker News राय
  • Temporal मौजूदा Date() API की समस्याओं को हल करने में उपयोगी है। यह Rust के chrono और Java के Joda Time जैसी उच्च-गुणवत्ता वाली time libraries से प्रेरित होकर एक सुविधाजनक API प्रदान करता है

    • समय जटिल है, और Temporal इसे naive time, instant, और zoned time में बाँटकर संभालता है
    • किसी timestamp में एक दिन जोड़ते समय यह तय करना पड़ता है कि वह किसी विशेष timezone में local है या नहीं। वरना DST या timezone बदलने पर bugs आ सकते हैं
    • यह "fixed offset" timestamp और किसी विशेष timezone के timestamp के बीच serialization की समस्या भी हल करता है
  • Temporal.ZonedDateTime.prototype.withTimeZone() का उपयोग करके timezone बदला जा सकता है

    • timezone conversion और duration handling वे महत्वपूर्ण features हैं जिन्हें library को संभालना चाहिए, और Temporal यह करता है
    • लेकिन Temporal.Duration कोई custom format function प्रदान नहीं करता
  • Temporal proposal अच्छा है, लेकिन comparison में reference equality का उपयोग करना थोड़ा निराशाजनक है

    • इससे objects को Map key के रूप में उपयोग करने या Set में इकट्ठा करने की सुविधा समाप्त हो जाती है
  • TC39 में कई features विकसित हो रहे हैं, और लोग चाहते हैं कि Temporal जल्दी जारी हो

    • प्रमुख browsers को नए features support करने के लिए development effort की ज़रूरत होगी
  • Temporal timezone data को कैसे update करता है, इसे लेकर जिज्ञासा है

    • अगर user अपना browser update नहीं करता, तो उसे गलत समय दिख सकता है
  • timezone बदलने पर events जोड़ने का सुझाव दिया गया है

    • बहुत से लोग रोज़ाना timezones के बीच यात्रा करते हैं
  • Temporal नाम सामान्य time object के साथ टकराव से बचने के लिए चुना गया था, लेकिन शुरुआत में इसे garbage collection control समझा जा सकता है

  • PHP की Carbon class, DateTime से inherit करके mutable timestamp handling की समस्याओं को समझाती है

    • हमेशा नया instance लौटाने के लिए CarbonImmutable का उपयोग करना बेहतर है
    • Laravel में CarbonImmutable और Carbon को alias के रूप में import करने का तरीका सुझाया गया है
  • JavaScript Temporal से जुड़े कई लेख और चर्चाएँ मौजूद हैं