JavaScript Temporal API륌 ì¬ì©íì¬ ì¬ì©ì ì§ì ìê°ë륌 구ííë ë°©ë²ì ë°°ì°ê³ , ì¬ì©ì ì§ì 구íìŒë¡ ìê°ë ë°ìŽí°ë¥Œ ì²ëЬí ëì ìŽì ì ìŽíŽë³Žìžì.
JavaScript Temporal ìê°ë ë°ìŽí°ë² ìŽì€: ì¬ì©ì ì§ì ìê°ë 구í
JavaScript Temporal APIë Ʞ졎 Date ê°ì²Žì ë§ì íê³ë¥Œ íŽê²°íë©° JavaScriptìì ë ì§ì ìê°ì ì²ëЬíë íëì ìž ì ê·Œ ë°©ìì ì ê³µí©ëë€. ë ì§ ë° ìê° ìì
ìì ì€ìí 잡멎ì ìê°ë êŽëЬì
ëë€. Temporalì IANA(Internet Assigned Numbers Authority) ìê°ë ë°ìŽí°ë² ìŽì€ë¥Œ íì©íì§ë§, ì¬ì©ì ì§ì ìê°ë 구íìŽ íìí ìë늬ì€ê° ììµëë€. ìŽ êžììë JavaScript Temporal API륌 ì¬ì©í ì¬ì©ì ì§ì ìê°ë 구íì ë³µì¡ì±ì ê¹ìŽ íê³ ë€ìŽ, ìì ë§ì ìê°ë ë¡ì§ì ë§ë€ìŽìŒ íë ìŽì , ìêž°, ê·žëŠ¬ê³ ë°©ë²ì ìŽì ì ë§ì¶¥ëë€.
IANA ìê°ë ë°ìŽí°ë² ìŽì€ì ê·ž íê³ ìŽíŽíêž°
IANA ìê°ë ë°ìŽí°ë² ìŽì€(tzdata ëë Olson ë°ìŽí°ë² ìŽì€ëŒê³ ë íš)ë ì ìžê³ ì¬ë¬ ì§ìì 곌거 ë° ë¯žë ìê°ë ì íì í¬íší í¬êŽì ìž ìê°ë ì 볎 몚ìì
ëë€. ìŽ ë°ìŽí°ë² ìŽì€ë TemporalìŽ ì¬ì©íë ê²ì í¬íšíì¬ ëë¶ë¶ì ìê°ë 구íì êž°ë°ìŽ ë©ëë€. America/Los_Angeles ëë Europe/London곌 ê°ì IANA ìë³ì륌 ì¬ì©í멎 ê°ë°ìë ë€ë¥ž ìì¹ì ìê°ì ì ííê² íííê³ ë³íí ì ììµëë€. íì§ë§ IANA ë°ìŽí°ë² ìŽì€ê° 몚ë 겜ì°ì ì í©í íŽê²°ì±
ì ìëëë€.
ë€ìì ì¬ì©ì ì§ì ìê°ë 구íì íìë¡ í ì ìë ëª ê°ì§ íê³ì ëë€:
- ë ì ì ìž ìê°ë ê·ì¹: ìŒë¶ ì¡°ì§ìŽë êŽí 구ìì ê³µê°ëì§ ììê±°ë ìì§ IANA ë°ìŽí°ë² ìŽì€ì í¬íšëì§ ìì ìê°ë ê·ì¹ì ì¬ì©í ì ììµëë€. ìŽë ëŽë¶ ìì€í , êžìµ êž°êŽ ëë í¹ì ë¹íì€ ìê°ë ì ì륌 ê°ì§ ì ë¶ êž°êŽìì ë°ìí ì ììµëë€.
- ìžë¶íë ì ìŽ: IANA ë°ìŽí°ë² ìŽì€ë êŽë²ìí ì§ìì í¬êŽí©ëë€. íì€ IANA ì§ìì ëìŽìë í¹ì í¹ì±ìŽë 겜ê³ë¥Œ ê°ì§ ìê°ë륌 ì ìíŽìŒ í ìë ììµëë€. ì¬ë¬ ìê°ëì ì§ì¬ë¥Œ ë ë€êµì êž°ì ì ììíŽ ë³Žìžì. ê·žë€ì ê³ ì í ê·ì¹ ì§í©ì ê°ì§ ëŽë¶ "êž°ì ì©" ìê°ë륌 ì ìí ì ììµëë€.
- ëšìíë íí: IANA ë°ìŽí°ë² ìŽì€ì ë³µì¡ì±ì í¹ì ì í늬ìŒìŽì ìë 곌ëí ì ììµëë€. ì íë ìê°ë ì§í©ë§ ì§ìíê±°ë ì±ë¥ìì ìŽì ë¡ ëšìíë ííìŽ íìí 겜ì°, ì¬ì©ì ì§ì 구íìŽ ë íšìšì ìŒ ì ììµëë€. 늬ìì€ê° ì íë ìë² ëë ì¥ì¹ììë ì¶ìë ì¬ì©ì ì§ì ìê°ë 구íìŽ ë ì€ì©ì ìŒ ì ììµëë€.
- í ì€íž ë° ì뮬ë ìŽì : ìê°ì 믌ê°í ì í늬ìŒìŽì ì í ì€íží ë, íì€ IANA ë°ìŽí°ë² ìŽì€ë¡ë ì¬ííêž° ìŽë €ìŽ í¹ì ìê°ë ì íìŽë ìë늬ì€ë¥Œ ì뮬ë ìŽì íê³ ì¶ì ì ììµëë€. ì¬ì©ì ì§ì ìê°ë륌 ì¬ì©í멎 í ì€íž 목ì ì íµì ë í겜ì ë§ë€ ì ììµëë€. ì륌 ë€ìŽ, ì íí ìì¥ ê°ì¥/íì¥ ìê°ì ìíŽ ì¬ë¬ ì뮬ë ìŽì ë ìê°ëì ê±žì³ êžìµ ê±°ë ìì€í ì í ì€ížíë 겜ì°ê° ììµëë€.
- IANA륌 ëìŽìë ìì¬ì ì íì±: IANAë í¬êŽì ìŽì§ë§, ë§€ì° í¹ì í ìì¬ì 목ì ì ìíŽ ìì¬ì ë°ìŽí°ì êž°ë°íì¬ IANA ì 볎륌 ë첎íê±°ë ê°ì íë ìê°ë ê·ì¹ì ë§ë€ìŽìŒ í ìë ììµëë€.
Temporal.TimeZone ìží°íìŽì€
Temporal.TimeZone ìží°íìŽì€ë Temporal APIìì ìê°ë륌 ëíëŽë íµì¬ êµ¬ì± ììì
ëë€. ì¬ì©ì ì§ì ìê°ë륌 ë§ë€ë €ë©Ž ìŽ ìží°íìŽì€ë¥Œ 구ííŽìŒ í©ëë€. ìží°íìŽì€ë ë€ì ë©ìëì 구íì ì구í©ëë€:
getOffsetStringFor(instant: Temporal.Instant): string: 죌ìŽì§Temporal.Instantì ëí ì€íì 묞ììŽ(ì:+01:00)ì ë°íí©ëë€. ìŽ ë©ìëë í¹ì ìì ì UTCë¡ë¶í°ì ì€íì ì ê²°ì íë ë° ì€ìí©ëë€.getOffsetNanosecondsFor(instant: Temporal.Instant): number: 죌ìŽì§Temporal.Instantì ëí ì€íì ì ëë žìŽ ëšìë¡ ë°íí©ëë€. ìŽëgetOffsetStringForì ë ì ë°í ë²ì ì ëë€.getNextTransition(startingPoint: Temporal.Instant): Temporal.Instant | null: 죌ìŽì§Temporal.InstantìŽíì ë€ì ìê°ë ì íì ë°ííê±°ë, ë ìŽì ì íìŽ ììŒë©Žnullì ë°íí©ëë€.getPreviousTransition(startingPoint: Temporal.Instant): Temporal.Instant | null: 죌ìŽì§Temporal.InstantìŽì ì ìŽì ìê°ë ì íì ë°ííê±°ë, ìŽì ì íìŽ ììŒë©Žnullì ë°íí©ëë€.toString(): string: ìê°ëì 묞ììŽ ííì ë°íí©ëë€.
ì¬ì©ì ì§ì ìê°ë 구ííêž°
ê³ ì ë ì€íì
ì ê°ì§ ê°ëší ì¬ì©ì ì§ì ìê°ë륌 ë§ë€ìŽ ë³Žê² ìµëë€. ìŽ ìì ë ì¬ì©ì ì§ì Temporal.TimeZone 구íì Ʞ볞 구조륌 볎ì¬ì€ëë€.
ìì : ê³ ì ì€íì ìê°ë
UTCë¡ë¶í° +05:30ì ê³ ì ì€íì ì ê°ì§ ìê°ë륌 ìê°íŽ ëŽ ìë€. ìŽë ìžëìì íí 볌 ì ììµëë€(ë¹ë¡ IANAê° ìžë륌 ìí íì€ ìê°ë륌 ì ê³µíì§ë§). ìŽ ìì ë ìŒêŽ ì ìœ ìê°ì (DST) ì íì ê³ ë €íì§ ìê³ ìŽ ì€íì ì ëíëŽë ì¬ì©ì ì§ì ìê°ë륌 ë§ëëë€.
class FixedOffsetTimeZone {
constructor(private offset: string) {
if (!/^([+-])(\d{2}):(\d{2})$/.test(offset)) {
throw new RangeError('Invalid offset format. Must be +HH:MM or -HH:MM');
}
}
getOffsetStringFor(instant: Temporal.Instant): string {
return this.offset;
}
getOffsetNanosecondsFor(instant: Temporal.Instant): number {
const [sign, hours, minutes] = this.offset.match(/^([+-])(\d{2}):(\d{2})$/)!.slice(1);
const totalMinutes = parseInt(hours, 10) * 60 + parseInt(minutes, 10);
const nanoseconds = totalMinutes * 60 * 1_000_000_000;
return sign === '+' ? nanoseconds : -nanoseconds;
}
getNextTransition(startingPoint: Temporal.Instant): Temporal.Instant | null {
return null; // ê³ ì ì€íì
ìê°ëìë ì íìŽ ììµëë€
}
getPreviousTransition(startingPoint: Temporal.Instant): Temporal.Instant | null {
return null; // ê³ ì ì€íì
ìê°ëìë ì íìŽ ììµëë€
}
toString(): string {
return `FixedOffsetTimeZone(${this.offset})`;
}
}
const customTimeZone = new FixedOffsetTimeZone('+05:30');
const now = Temporal.Now.instant();
const zonedDateTime = now.toZonedDateTimeISO(customTimeZone);
console.log(zonedDateTime.toString());
ì€ëª :
FixedOffsetTimeZoneíŽëì€ë ìì±ììì ì€íì 묞ììŽ(ì:+05:30)ì ë°ìµëë€.getOffsetStringForë©ìëë ëšìí ê³ ì ë ì€íì 묞ììŽì ë°íí©ëë€.getOffsetNanosecondsForë©ìëë ì€íì 묞ììŽì êž°ë°ìŒë¡ ì€íì ì ëë žìŽ ëšìë¡ ê³ì°í©ëë€.getNextTransition곌getPreviousTransitionë©ìëë ìŽ ìê°ëì ì íìŽ ììŒë¯ë¡nullì ë°íí©ëë€.toStringë©ìëë ìê°ëì 묞ììŽ ííì ì ê³µí©ëë€.
ì¬ì©ë²:
ì ìœëë +05:30 ì€íì
ì ê°ì§ FixedOffsetTimeZoneì ìžì€íŽì€ë¥Œ ìì±í©ëë€. ê·žë° ë€ì íì¬ ìì ì ê°ì žì ì¬ì©ì ì§ì ìê°ë륌 ì¬ì©íì¬ ZonedDateTimeìŒë¡ ë³íí©ëë€. ZonedDateTime ê°ì²Žì toString() ë©ìëë ì§ì ë ìê°ëì ë ì§ì ìê°ì ì¶ë ¥í©ëë€.
ìì : ëšìŒ ì íìŽ ìë ìê°ë
ìŽì ëšìŒ ì íì í¬íšíë ë ë³µì¡í ì¬ì©ì ì§ì ìê°ë륌 구ííŽ ë³Žê² ìµëë€. í¹ì DST ê·ì¹ì ê°ì§ ê°ìì ìê°ë륌 ê°ì í©ëë€.
class SingleTransitionTimeZone {
private readonly transitionInstant: Temporal.Instant;
private readonly standardOffset: string;
private readonly dstOffset: string;
constructor(
transitionEpochNanoseconds: bigint,
standardOffset: string,
dstOffset: string
) {
this.transitionInstant = Temporal.Instant.fromEpochNanoseconds(transitionEpochNanoseconds);
this.standardOffset = standardOffset;
this.dstOffset = dstOffset;
}
getOffsetStringFor(instant: Temporal.Instant): string {
return instant < this.transitionInstant ? this.standardOffset : this.dstOffset;
}
getOffsetNanosecondsFor(instant: Temporal.Instant): number {
const offsetString = this.getOffsetStringFor(instant);
const [sign, hours, minutes] = offsetString.match(/^([+-])(\d{2}):(\d{2})$/)!.slice(1);
const totalMinutes = parseInt(hours, 10) * 60 + parseInt(minutes, 10);
const nanoseconds = totalMinutes * 60 * 1_000_000_000;
return sign === '+' ? nanoseconds : -nanoseconds;
}
getNextTransition(startingPoint: Temporal.Instant): Temporal.Instant | null {
return startingPoint < this.transitionInstant ? this.transitionInstant : null;
}
getPreviousTransition(startingPoint: Temporal.Instant): Temporal.Instant | null {
return startingPoint >= this.transitionInstant ? this.transitionInstant : null;
}
toString(): string {
return `SingleTransitionTimeZone(transition=${this.transitionInstant.toString()}, standard=${this.standardOffset}, dst=${this.dstOffset})`;
}
}
// ì¬ì© ìì (ì€ì Epoch ëë
žìŽ íìì€í¬íë¡ êµì²Žíìžì)
const transitionEpochNanoseconds = BigInt(1672531200000000000); // 2023ë
1ì 1ìŒ, 00:00:00 UTC
const standardOffset = '+01:00';
const dstOffset = '+02:00';
const customTimeZoneWithTransition = new SingleTransitionTimeZone(
transitionEpochNanoseconds,
standardOffset,
dstOffset
);
const now = Temporal.Now.instant();
const zonedDateTimeBefore = now.toZonedDateTimeISO(customTimeZoneWithTransition);
const zonedDateTimeAfter = Temporal.Instant.fromEpochNanoseconds(transitionEpochNanoseconds + BigInt(1000)).toZonedDateTimeISO(customTimeZoneWithTransition);
console.log("ì í ì :", zonedDateTimeBefore.toString());
console.log("ì í í:", zonedDateTimeAfter.toString());
ì€ëª :
SingleTransitionTimeZoneíŽëì€ë íì€ììì ìŒêŽ ì ìœ ìê°ì ë¡ì ëšìŒ ì íìŽ ìë ìê°ë륌 ì ìí©ëë€.- ìì±ìë ì í ìì ì
Temporal.Instant, íì€ ì€íì , ê·žëŠ¬ê³ DST ì€íì ì ìžìë¡ ë°ìµëë€. getOffsetStringForë©ìëë 죌ìŽì§Temporal.Instantê° ì í ìì ìŽì ìžì§ ìŽíìžì§ì ë°ëŒ ì ì í ì€íì ì ë°íí©ëë€.getNextTransition곌getPreviousTransitionë©ìëë ì ì© ê°ë¥í ê²œì° ì í ìì ì ë°ííê³ , ê·žë ì§ ììŒë©Žnullì ë°íí©ëë€.
ì€ì ê³ ë €ì¬í:
- ì í ë°ìŽí°: ì€ì ìë늬ì€ììë ì íí ì í ë°ìŽí°ë¥Œ ì»ë ê²ìŽ ì€ìí©ëë€. ìŽ ë°ìŽí°ë ë ì ì ìž ìì€, ìì¬ì êž°ë¡ ëë êž°í ìžë¶ ë°ìŽí° ì ê³µìë¡ë¶í° ì¬ ì ììµëë€.
- ì€ìŽ: Temporal APIë ì€ìŽë¥Œ í¹ì ë°©ììŒë¡ ì²ëЬí©ëë€. ì í늬ìŒìŽì
ì ê·žë¬í ì ë°ëê° íìí 겜ì°, ì¬ì©ì ì§ì ìê°ë 구íìŽ ì€ìŽë¥Œ ì¬ë°ë¥Žê² ì²ëЬíëë¡ íŽìŒ í©ëë€. ì€ìŽë¥Œ ë¶ëëœê² 묎ìíê³ íì¬ ìê°ì ìžì€íŽížë¡ ë°ííë
Temporal.Now.instant()ì¬ì©ì ê³ ë €íìžì. - ì±ë¥: ì¬ì©ì ì§ì ìê°ë 구íì í¹í ë³µì¡í ê³ì°ì í¬íšíë ê²œì° ì±ë¥ì ìí¥ì ë¯žì¹ ì ììµëë€. ìœë륌 ìµì ííì¬ í¹í ì±ë¥ìŽ ì€ìí ì í늬ìŒìŽì ìì íšìšì ìŒë¡ ìëíëë¡ íìžì. ì륌 ë€ìŽ, ì€ë³µ ê³ì°ì íŒíêž° ìíŽ ì€íì ê³ì°ì ë©ëªšìŽì ìŽì (memoize)íìžì.
- í ì€íž: ì¬ì©ì ì§ì ìê°ë 구íì ì² ì í í ì€ížíì¬ ë€ìí ìë늬ì€ìì ì¬ë°ë¥Žê² ìëíëì§ íìžíìžì. ì¬êž°ìë ì í, ì£ì§ ìŒìŽì€, ê·žëŠ¬ê³ ì í늬ìŒìŽì ì ë€ë¥ž ë¶ë¶ê³Œì ìíž ìì© í ì€ížê° í¬íšë©ëë€.
- IANA ì ë°ìŽíž: ì¬ì©ì ì§ì 구íì ìí¥ì ë¯žì¹ ì ìë ì ë°ìŽížê° ìëì§ IANA ìê°ë ë°ìŽí°ë² ìŽì€ë¥Œ 죌Ʞì ìŒë¡ ê²í íìžì. IANA ë°ìŽí°ê° ì¬ì©ì ì§ì ìê°ëì íìì±ì ë첎í ìë ììµëë€.
ì¬ì©ì ì§ì ìê°ëì ì€ì ì¬ì© ì¬ë¡
ì¬ì©ì ì§ì ìê°ëê° íì íìí ê²ì ìëì§ë§, ë í¹í ìŽì ì ì ê³µíë ìë늬ì€ê° ììµëë€. ë€ìì ëª ê°ì§ ì€ì ì¬ì© ì¬ë¡ì ëë€:
- êžìµ ê±°ë íë«íŒ: êžìµ ê±°ë íë«íŒì í¹í êµì ìì¥ì ë€ë£° ë ëì ì ë°ëë¡ ìê°ë ë°ìŽí°ë¥Œ ì²ëЬíŽìŒ íë 겜ì°ê° ë§ìµëë€. ì¬ì©ì ì§ì ìê°ëë íì€ IANA ë°ìŽí°ë² ìŽì€ìì ë€ë£šì§ ìë ê±°ëìë³ ìê°ë ê·ì¹ìŽë ê±°ë ìžì ìê°ì ëíëŒ ì ììµëë€. ì륌 ë€ìŽ, ìŒë¶ ê±°ëìë ê±°ë ìê°ì ìí¥ì 믞ì¹ë ìì ë ìŒêŽ ì ìœ ê·ì¹ìŽë í¹ì íŽìŒ ìŒì ìŒë¡ ìŽìë©ëë€.
- íê³µ ì°ì : íê³µ ì°ì ì ë¹í ì€ìŒì€ë§ ë° ìŽìì ìíŽ ì íí ìê° êŽëЬì í¬ê² ì졎í©ëë€. ì¬ì©ì ì§ì ìê°ëë ê³µíë³ ìê°ë륌 ëíëŽê±°ë ë¹í ê³í ìì€í ìì ìê°ë ì íì ì²ëЬíë ë° ì¬ì©ë ì ììµëë€. ì륌 ë€ìŽ, í¹ì íê³µì¬ë ì¬ë¬ ì§ìì ê±žì³ ëŽë¶ "íê³µì¬ ìê°"ìŒë¡ ìŽìë ì ììµëë€.
- íµì ìì€í : íµì ìì€í ì íµí ëŒì°í , ì²êµ¬ ë° ë€ížìí¬ ëêž°í륌 ìíŽ ìê°ë륌 êŽëЬíŽìŒ í©ëë€. ì¬ì©ì ì§ì ìê°ëë í¹ì ë€ížìí¬ ì§ìì ëíëŽê±°ë ë¶ì° ìì€í ìì ìê°ë ì íì ì²ëЬíë ë° ì¬ì©ë ì ììµëë€.
- ì ì¡° ë° ë¬Œë¥: ì ì¡° ë° ë¬Œë¥ìì ìê°ë ì íì±ì ìì° ìŒì ì¶ì , ê³µêžë§ êŽëЬ ë° êžë¡ë² ìŽì ì¡°ì ì ìíŽ ë§€ì° ì€ìí©ëë€. ì¬ì©ì ì§ì ìê°ëë ê³µì¥ë³ ìê°ë륌 ëíëŽê±°ë ë¬Œë¥ êŽëЬ ìì€í ìì ìê°ë ì íì ì²ëЬíë ë° ì¬ì©ë ì ììµëë€.
- ê²ì ì°ì : ìšëŒìž ê²ìì ì¢ ì¢ ì¬ë¬ ìê°ëì ê±žì³ í¹ì ìê°ì ìŽëЬë ììœë ìŽë²€ížë í ë뚌ížë¥Œ ê°ì§ëë€. ì¬ì©ì ì§ì ìê°ëë ê²ì ìŽë²€ížë¥Œ ëêž°ííê³ ë€ìí ìì¹ì íë ìŽìŽìê² ìê°ì ì ííê² íìíë ë° ì¬ì©ë ì ììµëë€.
- ìë² ëë ìì€í : 늬ìì€ê° ì íë ìë² ëë ìì€í ì ëšìíë ì¬ì©ì ì§ì ìê°ë 구íì ìŽì ì ë늎 ì ììµëë€. ìŽë¬í ìì€í ì ë©ëªšëЬ ì¬ì©ë곌 ê³ì° ì€ë²í€ë륌 ìµìííêž° ìíŽ ì¶ìë ìê°ë ì§í©ì ì ìíê±°ë ê³ ì ì€íì ìê°ë륌 ì¬ì©í ì ììµëë€.
ì¬ì©ì ì§ì ìê°ë 구íì ìí ëªšë² ì¬ë¡
ì¬ì©ì ì§ì ìê°ë륌 구íí ë, ì íì±, ì±ë¥ ë° ì ì§ êŽëЬì±ì 볎ì¥íêž° ìíŽ ë€ì ëªšë² ì¬ë¡ë¥Œ ë°ë¥Žìžì:
- Temporal API ì¬ë°ë¥Žê² ì¬ì©íêž°:
Temporal.Instant,Temporal.ZonedDateTime,Temporal.TimeZone곌 ê°ì Temporal APIì ê·ž ê°ë ì ìì í ìŽíŽíŽìŒ í©ëë€. ìŽë¬í ê°ë ì ì못 ìŽíŽí멎 ë¶ì íí ìê°ë ê³ì°ìŒë¡ ìŽìŽì§ ì ììµëë€. - ì ë ¥ ë°ìŽí° ê²ìŠíêž°: ì¬ì©ì ì§ì ìê°ë륌 ë§ë€ ë ì€íì 묞ììŽ ë° ì í ìê°ê³Œ ê°ì ì ë ¥ ë°ìŽí°ë¥Œ ê²ìŠíìžì. ìŽë ì€ë¥ë¥Œ ë°©ì§íê³ ìê°ëê° ììëë¡ ìëíëë¡ ë³Žì¥íë ë° ëììŽ ë©ëë€.
- ì±ë¥ ìµì ííêž°: ì¬ì©ì ì§ì ìê°ë 구íì í¹í ë³µì¡í ê³ì°ì í¬íšíë ê²œì° ì±ë¥ì ìí¥ì ì€ ì ììµëë€. íšìšì ìž ìê³ ëŠ¬ìŠê³Œ ë°ìŽí° 구조륌 ì¬ì©íì¬ ìœë륌 ìµì ííìžì. ì€ë³µ ê³ì°ì íŒíêž° ìíŽ ì죌 ì¬ì©ëë ê°ì ìºì±íë ê²ì ê³ ë €íìžì.
- ì£ì§ ìŒìŽì€ ì²ëЬíêž°: ìê°ë ì íì í¹í ìŒêŽ ì ìœ ìê°ì ì êŽë šíì¬ ë³µì¡í ì ììµëë€. ì¬ì©ì ì§ì ìê°ë 구íìŽ ì í ì€ì ë ë² ë°ìíê±°ë 졎ì¬íì§ ìë ìê°ê³Œ ê°ì ì£ì§ ìŒìŽì€ë¥Œ ì¬ë°ë¥Žê² ì²ëЬíëë¡ íìžì.
- ëª íí 묞ì ì ê³µíêž°: ìê°ë ê·ì¹, ì í ìê° ë° êž°í í¹ì ê³ ë € ì¬íì í¬íšíì¬ ì¬ì©ì ì§ì ìê°ë 구íì ì² ì í 묞ìííìžì. ìŽë ë€ë¥ž ê°ë°ìê° ìœë륌 ìŽíŽíê³ ì ì§ êŽëЬíë ë° ëììŽ ë©ëë€.
- IANA ì ë°ìŽíž ê³ ë €íêž°: ì¬ì©ì ì§ì 구íì ìí¥ì ë¯žì¹ ì ìë ì ë°ìŽížê° ìëì§ IANA ìê°ë ë°ìŽí°ë² ìŽì€ë¥Œ 몚ëí°ë§íìžì. ìë¡ìŽ IANA ë°ìŽí°ê° ì¬ì©ì ì§ì ìê°ëì íìì±ì ë첎í ìë ììµëë€.
- 곌ëí ìì§ëìŽë§ íŒíêž°: ì ë§ë¡ íìí 겜ì°ìë§ ì¬ì©ì ì§ì ìê°ë륌 ë§ëìžì. íì€ IANA ë°ìŽí°ë² ìŽì€ê° ì구 ì¬íì 충족íë€ë©Ž, ì¬ì©ì ì§ì 구íì ë§ëë ê²ë³Žë€ ê·žê²ì ì¬ì©íë ê²ìŽ ìŒë°ì ìŒë¡ ë ì¢ìµëë€. 곌ëí ìì§ëìŽë§ì ë³µì¡ì±ê³Œ ì ì§ êŽëЬ ë¶ëŽì ê°ì€ìí¬ ì ììµëë€.
- ì믞 ìë ìê°ë ìë³ì ì¬ì©íêž°: ì¬ì©ì ì§ì ìê°ëì 겜ì°ìë ëŽë¶ì ìŒë¡ ìœê² ìŽíŽí ì ìë ìë³ì륌 ë¶ì¬íì¬ ê³ ì í êž°ë¥ì ì¶ì íë ë° ëììŽ ëëë¡ íìžì.
ê²°ë¡
JavaScript Temporal APIë JavaScriptìì ë ì§ì ìê°ì ì²ëЬíë ê°ë ¥íê³ ì ì°í ë°©ë²ì ì ê³µí©ëë€. IANA ìê°ë ë°ìŽí°ë² ìŽì€ë ê·ì€í 늬ìì€ìŽì§ë§, í¹ì ìë늬ì€ììë ì¬ì©ì ì§ì ìê°ë 구íìŽ íìí ì ììµëë€. Temporal.TimeZone ìží°íìŽì€ë¥Œ ìŽíŽíê³ ëªšë² ì¬ë¡ë¥Œ ë°ë¥Žë©Ž í¹ì ì구 ì¬íì 충족íê³ ì í늬ìŒìŽì
ìì ì íí ìê°ë ì²ëŠ¬ë¥Œ 볎ì¥íë ì¬ì©ì ì§ì ìê°ë륌 ë§ë€ ì ììµëë€. êžìµ, íê³µ ëë ì ë°í ìê° êŽëЬì ì졎íë ë€ë¥ž ì°ì
ë¶ìŒìì ìŒíë , ì¬ì©ì ì§ì ìê°ëë ìê°ë ë°ìŽí°ë¥Œ ì ííê³ íšìšì ìŒë¡ ì²ëЬíë ë° ì ì©í ëêµ¬ê° ë ì ììµëë€.