ค้นหาเว็บไซต์

javascript - ดึงวันที่ปัจจุบันโดยใช้ date-fns ในรูปแบบ ISO-8601


ฉันต้องการได้รูปแบบ ISO-8601 ของชั่วโมง:นาที:วินาทีล่าสุดจากวันปัจจุบันโดยใช้ไลบรารี date-fns:

ฉันกำลังใช้: endOfDay(new Date());

Fri Sep 14 2018 23:59:59 GMT-0300

ดังนั้นเพิ่ม toISOString() เพื่อให้ได้รูปแบบ ISO: endOfDay(new Date()).toISOString()

ผลลัพธ์: 2018-09-15T02:59:59.999Z

เมื่อฉันต้องการ:

2018-09-14T23:59:59.999Z

คำตอบ #1

2018-09-14T23:59:59.999Z ไม่ใช่เวลาสิ้นสุดของวันที่คำนวณโดย endOfDay(new Date()); มันเร็วกว่านั้น 3 ชั่วโมง ตัวอักษร "Z" หมายถึงเวลา UTC และโซนเวลาท้องถิ่นของคุณมีออฟเซ็ตจาก UTC -0300.

โดยการเรียกใช้ endOfDay คุณจะได้รับค่าของวันที่ ซึ่งคุณสามารถใช้ในการเปรียบเทียบและการคำนวณอื่น ๆ กับค่าของวันที่อื่น ๆ ได้ มันเป็นวันที่ที่สมบูรณ์พร้อมเวลาตามเขตเวลาท้องถิ่น

คุณต้องการเก็บหมายเลขวันเดียวกันในสตริงที่จัดรูปแบบหรือไม่? คุณสามารถจัดรูปแบบวันที่เป็นสตริง ISO 8601 ในเขตเวลาท้องถิ่นของคุณได้:

format(endOfDay(new Date()), 'yyyy-MM-dd\'T\'HH:mm:ssXX')
// Prints "2018-09-14T23:59:59.999-0300" in Brazil (BRT)

formatISO(endOfDay(new Date()))
// Prints "2018-09-14T23:59:59.999-03:00" in Brazil (BRT)

คุณต้องการที่จะได้วันสิ้นสุดของวันนี้ด้วยหมายเลขเดียวกับวันนี้ใน UTC หรือไม่? ถ้าคุณไม่สนใจวันสิ้นสุดจริง ๆ ของคุณเมื่อเทียบกับวันที่อื่น ๆ คุณสามารถรวม "วินาทีสุดท้ายของวัน" กับ "Z" เข้าด้วยกันได้เลย:

format(new Date(), 'yyyy-MM-dd') + 'T23:59:59.999Z'
// Prints "2018-09-14T23:59:59.999Z" anywhere on Earth

หมายเหตุ: หากคุณใช้ date-fns 1.x ให้ใช้รูปแบบ yyyy-MM-DD[T]HH:mm:ssZZ และ yyyy-MM-DD ในรูปแบบที่ระบุด้านบน ไวยากรณ์ได้เปลี่ยนไปในรุ่น 2.x ดูรูปแบบที่รองรับด้วย ซึ่งคุณสามารถสลับไปใช้กับเวอร์ชันของ date-fns ของคุณได้

คำตอบ #2

format(endOfDay(new Date()), "yyyy-MM-dd'T'HH:mm:ss'Z'")

วิธีนี้ได้ผลสำหรับฉัน

บทความที่เกี่ยวข้อง