พื้นหลัง
Date
วัตถุของ JavaScript ติดตามเวลาใน UTC ภายใน แต่โดยทั่วไปจะรับอินพุตและสร้างผลลัพธ์ในเวลาท้องถิ่นของคอมพิวเตอร์ที่กำลังทำงานอยู่ มีสิ่งอำนวยความสะดวกน้อยมากสำหรับการทำงานกับเวลาในเขตเวลาอื่น
การเป็นตัวแทนภายในของDate
วัตถุเป็นตัวเลขเดียวซึ่งแสดงถึงจำนวนมิลลิวินาทีที่ผ่านไปนับตั้งแต่1970-01-01 00:00:00 UTC
โดยไม่คำนึงถึงวินาทีกระโดด ไม่มีเขตเวลาหรือรูปแบบสตริงที่จัดเก็บในวัตถุ Date เอง เมื่อมีการใช้ฟังก์ชันต่าง ๆ ของDate
วัตถุเขตเวลาท้องถิ่นของคอมพิวเตอร์จะถูกนำไปใช้กับการเป็นตัวแทนภายใน หากฟังก์ชั่นสร้างสตริงข้อมูลสถานที่ของคอมพิวเตอร์อาจถูกนำมาพิจารณาเพื่อกำหนดวิธีการสร้างสตริงนั้น รายละเอียดแตกต่างกันไปตามฟังก์ชั่นและบางอย่างเฉพาะการใช้งาน
การดำเนินการเดียวที่Date
วัตถุสามารถทำได้กับเขตเวลาที่ไม่ใช่ในท้องที่คือ:
มันสามารถแยกสตริงที่มี UTC ชดเชยตัวเลขจากเขตเวลาใด ๆ มันใช้สิ่งนี้เพื่อปรับค่าการแยกวิเคราะห์และเก็บเทียบเท่า UTC เวลาท้องถิ่นดั้งเดิมและการชดเชยจะไม่ถูกเก็บไว้ในDate
วัตถุที่เป็นผลลัพธ์ ตัวอย่างเช่น:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toISOString() //=> "2020-04-12T16:00:00.000Z"
d.valueOf() //=> 1586707200000 (this is what is actually stored in the object)
ในสภาพแวดล้อมที่ใช้ECMASCript Internationalization API (aka "Intl") Date
วัตถุสามารถสร้างสตริงเฉพาะสถานที่เพื่อปรับเป็นตัวระบุเขตเวลาที่กำหนด สามารถทำได้ผ่านtimeZone
ตัวเลือกtoLocaleString
และรูปแบบต่างๆ การใช้งานส่วนใหญ่จะสนับสนุน IANA 'America/New_York'
เวลาตัวระบุโซนเช่น ตัวอย่างเช่น:
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toLocaleString('en-US', { timeZone: 'America/New_York' })
//=> "4/12/2020, 12:00:00 PM"
// (midnight in China on Apring 13th is noon in New York on April 12th)
สภาพแวดล้อมที่ทันสมัยส่วนใหญ่รองรับชุดตัวระบุเขตเวลาแบบเต็มของ IANA ( ดูตารางความเข้ากันได้ที่นี่ ) อย่างไรก็ตามโปรดทราบว่าตัวระบุเฉพาะที่จำเป็นต้องได้รับการสนับสนุนจาก Intl คือ'UTC'
ดังนั้นคุณควรตรวจสอบอย่างรอบคอบหากคุณต้องการสนับสนุนเบราว์เซอร์รุ่นเก่าหรือสภาพแวดล้อมที่ผิดปกติ (ตัวอย่างเช่นอุปกรณ์ IoT ที่มีน้ำหนักเบา)
ห้องสมุด
มีหลายไลบรารีที่สามารถใช้ทำงานกับเขตเวลาได้ แม้ว่าพวกเขาจะยังไม่สามารถทำให้Date
วัตถุทำงานแตกต่างกัน แต่พวกเขามักจะใช้ฐานข้อมูลเขตเวลามาตรฐาน IANA และให้ฟังก์ชั่นการใช้งานใน JavaScript ไลบรารีสมัยใหม่ใช้ข้อมูลเขตเวลาที่ให้บริการโดย Intl API แต่โดยทั่วไปแล้วไลบรารีที่เก่ากว่าจะมีค่าใช้จ่ายโดยเฉพาะถ้าคุณใช้งานในเว็บเบราว์เซอร์เนื่องจากฐานข้อมูลอาจมีขนาดใหญ่ขึ้นเล็กน้อย บางไลบรารีเหล่านี้ยังช่วยให้คุณสามารถเลือกลดชุดข้อมูลไม่ว่าจะสนับสนุนเขตเวลาใดและ / หรือตามช่วงวันที่ที่คุณสามารถทำงานได้
นี่คือห้องสมุดที่ต้องพิจารณา:
ไลบรารีบนพื้นฐานระหว่างประเทศ
การพัฒนาใหม่ควรเลือกจากการใช้งานอย่างใดอย่างหนึ่งซึ่งขึ้นอยู่กับ Intl API สำหรับข้อมูลเขตเวลา:
ห้องสมุดที่ไม่ใช่ของต่างประเทศ
ไลบรารีเหล่านี้ได้รับการบำรุงรักษา แต่มีภาระในการทำแพ็กเกจข้อมูลเขตเวลาของตัวเอง
* ในขณะที่ก่อนหน้านี้ได้แนะนำ Moment และ Moment-Timezone ทีม Moment ตอนนี้ชอบให้ผู้ใช้เลือก Luxon สำหรับการพัฒนาใหม่
ห้องสมุดที่เลิกผลิตแล้ว
ห้องสมุดเหล่านี้ถูกยกเลิกอย่างเป็นทางการและไม่ควรใช้อีกต่อไป
ข้อเสนอในอนาคต
TC39 ขมับเสนอจุดมุ่งหมายที่จะให้ชุดใหม่ของวัตถุมาตรฐานสำหรับการทำงานกับวันที่และเวลาในภาษาจาวาสคริปต์ตัวเอง ซึ่งจะรวมถึงการสนับสนุนวัตถุที่รับรู้เขตเวลา