ด้วยสตริง ISO 8601 ฉันใช้ Moment js และกำลังทำ moment("2014-05-08T00:20:40Z").format("HH:mm:ss")
เพื่อรับเวลาสตริงที่ "00:20:40"
แต่
เหตุใดวันหยุดจึงเพิ่มขึ้น 1 วันและชั่วโมงจึงปิดใน mor ISO 8601 ใน Moment js
คำตอบ (1)
วันที่ ISO ของคุณคือวันที่ UTC นั่นคือสิ่งที่ Z
ในตอนท้ายหมายถึง คุณอยู่ 7 โซนเวลาทางตะวันตกของ UTC
เวลาที่คุณเริ่มต้นคือ 20 นาทีหลังเที่ยงคืนของวันที่ 8 หากคุณรันโค้ดในปารีส ประเทศฝรั่งเศส คุณจะได้คำตอบที่ถูกต้อง (โดยไม่สนใจการปรับ "เวลาฤดูร้อน") อย่างไรก็ตาม เนื่องจากคุณอยู่ 7 โซนเวลาทางตะวันตก คุณจะเป็นเวลา 5:20 น. ในช่วงบ่าย และคุณยังอยู่ในวันตามปฏิทินก่อนหน้า
มองในแง่หนึ่ง ไม่มีอะไรจะ "แก้ไข" ได้ เวอร์ชันเวลาท้องถิ่นตามสถานที่ที่คุณอยู่จะแสดงเวลาจุดเดียวกันกับเวลา ISO UTC ดั้งเดิม ทุกอย่างทำงานได้อย่างถูกต้อง การแสดงค่าวันที่เริ่มต้นอยู่ในเวลา ท้องถิ่น ออบเจ็กต์ดั้งเดิม Date ใน JavaScript มี API เพื่อเข้าถึงส่วนประกอบตามเงื่อนไข UTC หากคุณต้องการไปทางนั้น
คุณสามารถใช้ .toISOString()
หากคุณต้องการรับสตริง ISO ดั้งเดิมกลับมา:
moment("2014-05-08T00:20:40Z").toISOString()
หรือคุณสามารถรวมแท็กโซนเวลาในสตริงรูปแบบของคุณ:
moment("2014-05-08T00:20:40Z").format("HH:mm:ss zz")
(โปรดทราบว่า "z" ในสตริงรูปแบบไม่ได้มีความหมายเหมือนกับ "Z" ในเวลา ISO เป็นเพียงอักขระพิเศษในการจัดรูปแบบจากอักษรตัวแรกของคำว่า "zone" ในสตริง ISO เป็นตัวอักษรตัวแรกของคำว่า "ศูนย์" และหมายความว่าเวลาอยู่ที่ศูนย์ชดเชยจากเวลา UTC บางคนเรียกมันว่า "เวลาซูลู" เพราะ "Z")
z
ในการประทับเวลาหมายถึง UTC ดังนั้นฉันเดาได้ดีที่สุดว่าคุณไม่ได้อยู่ในเขตเวลา UTC ดังนั้นจึงจัดรูปแบบการประทับเวลาให้เป็นเขตเวลาของคุณ - person Derek Pollard   schedule 28.09.2016