รับช่วงเวลาสำหรับวันที่ที่ระบุโดยใช้ Javascript


คำตอบ:


190

คุณสามารถสร้างDateวัตถุและเรียกgetTimeใช้:

new Date(2010, 6, 26).getTime() / 1000

13
อาร์กิวเมนต์เดือนสำหรับตัวสร้างวันที่ขาดความสม่ำเสมอเล็กน้อยและเป็นศูนย์ตามจริง ซึ่งหมายความว่าวันที่ 7 คือเดือนสิงหาคมดังนั้นคุณต้องลบ 1 :-)
Andy E

6
@ แอนดี้ - มันเป็นความคิดที่แปลกประหลาดที่จะชดเชยเดือนโดย -1 ในขณะที่รักษาส่วนที่เหลือไว้และเป็นสิ่งที่สามารถทำให้กระสวยอวกาศหลุดออกไปได้ถ้า JavaScript เคยถูกใช้ที่นั่น :)
Anurag

7
น่าจะดีกว่าที่จะไป: วันที่ใหม่ ("2010-7-26") getTime () / 1000 ดังนั้นคุณจึงไม่ต้องคิดถึงการชดเชย
Vincent McNabb

6
@ Vincent: new Date("2010-7-26")จะไม่แยกวิเคราะห์ใน Internet Explorer ตัวสร้างวันที่อาศัยเมธอด Date.parse ()เมื่อสตริงถูกส่งผ่านซึ่งการใช้งานขึ้นอยู่กับ ECMA-262 3rd edition และด้วยเหตุนี้จึงไม่มีความยืดหยุ่นใน IE
Andy E

สามารถลดข้อผิดพลาดหรือความเข้าใจผิดที่เป็นไปได้ในการระบุเขตเวลาด้วย อย่างน้อยเวอร์ชันจริง (Linux-) ของ Firefox, Opera และ Chrome จะสนับสนุนเพื่อสร้างอินสแตนซ์ JavaScript Date เช่นวันที่ใหม่ ("1 ม.ค. 1970 GMT + 00: 00, 00:01"); ซึ่งยังช่วยลดความสับสนเกี่ยวกับรูปแบบเดือนที่ถูกต้อง
Michael Besteck



3

คำตอบบางคำไม่ได้อธิบายถึงผลข้างเคียงของการเปลี่ยนแปลงในเขตเวลาสำหรับวัตถุ JavaScript Date ดังนั้นคุณควรพิจารณาคำตอบนี้หากนี่เป็นข้อกังวลสำหรับคุณ

วิธีที่ 1: เขตเวลาของเครื่องขึ้นอยู่กับ

ตามค่าเริ่มต้น JavaScript จะส่งคืนวันที่โดยพิจารณาจากเขตเวลาของเครื่องดังนั้นgetTime()ผลลัพธ์จึงแตกต่างกันไปในแต่ละคอมพิวเตอร์ คุณสามารถตรวจสอบลักษณะการทำงานนี้ได้:

new Date(1970, 0, 1, 0, 0, 0, 0).getTime()
    // Since 1970-01-01 is Epoch, you may expect ZERO
    // but in fact the result varies based on computer's timezone

นี่ไม่ใช่ปัญหาหากคุณต้องการเวลาตั้งแต่ Epoch พิจารณาเขตเวลาของคุณ ดังนั้นหากคุณต้องการรับเวลาตั้งแต่ Epoch สำหรับวันที่ปัจจุบันหรือแม้แต่วันที่ที่ระบุตามเขตเวลาของคอมพิวเตอร์คุณสามารถใช้วิธีนี้ต่อไปได้

// Seconds since Epoch (Unix timestamp format)

new Date().getTime() / 1000             // local Date/Time since Epoch in seconds
new Date(2020, 11, 1).getTime() / 1000  // time since Epoch to 2020-12-01 00:00 (local timezone) in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

new Date().getTime()                    // local Date/Time since Epoch in milliseconds
new Date(2020,  0, 2).getTime()         // time since Epoch to 2020-01-02 00:00 (local timezone) in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

วิธีที่ 2: เขตเวลาของเครื่องเป็นอิสระ

อย่างไรก็ตามหากคุณต้องการใช้การเปลี่ยนแปลงในเขตเวลาและรับเวลาตั้งแต่ Epoch สำหรับวันที่ที่ระบุใน UTC (นั่นคือเขตเวลาที่ไม่ขึ้นกับ) คุณต้องใช้Date.UTCวิธีการหรือเปลี่ยนวันที่จากเขตเวลาของคุณเป็น UTC:

Date.UTC(1970,  0, 1)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()  // difference in milliseconds between your timezone and UTC
    (new Date(1970,  0, 1).getTime() - timezone_diff)
    // should be ZERO in any computer, since it is ZERO the difference from Epoch

ดังนั้นโดยใช้วิธีนี้ (หรือลบความแตกต่าง) ผลลัพธ์ควรเป็น:

// Seconds since Epoch (Unix timestamp format)

Date.UTC(2020,  0, 1) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-01-01 00:00 UTC in seconds
    (new Date(2020, 11, 1).getTime() - timezone_diff) / 1000  // time since Epoch to 2020-12-01 00:00 UTC in seconds

// Milliseconds since Epoch (used by some systems, eg. JavaScript itself)

Date.UTC(2020,  0, 2)   // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

    // Alternatively (if, for some reason, you do not want Date.UTC)
    const timezone_diff = new Date(1970, 0, 1).getTime()
    (new Date(2020,  0, 2).getTime() - timezone_diff)         // time since Epoch to 2020-01-02 00:00 UTC in milliseconds

// **Warning**: notice that MONTHS in JavaScript Dates starts in zero (0 = January, 11 = December)

IMO เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่ (ดูหมายเหตุด้านบน) คุณควรเลือกวิธีที่ 2มากกว่าเนื่องจากเป็นแบบอิสระ


หมายเหตุท้าย

แม้ว่าคำแนะนำในคำตอบนี้และเนื่องจากใช้Date.UTCไม่ได้หากไม่มีวันที่ / เวลาที่ระบุไว้คุณอาจมีแนวโน้มที่จะใช้แนวทางอื่นและทำสิ่งนี้:

const timezone_diff = new Date(1970, 0, 1).getTime()
(new Date().getTime() - timezone_diff)  // <-- !!! new Date() without arguments
    // means "local Date/Time subtracted by timezone since Epoch" (?)

สิ่งนี้ไม่สมเหตุสมผลและอาจผิด (คุณกำลังแก้ไขวันที่) ระวังอย่าทำเช่นนี้ ถ้าคุณต้องการที่จะได้รับเวลาตั้งแต่ยุคจากวันที่ปัจจุบันที่และเวลาที่คุณมีส่วนใหญ่อาจจะตกลงใช้วิธีที่ 1



1

Date.parse()January 1, 1970, 00:00:00 UTCวิธีการแยกวิเคราะห์เป็นตัวแทนสายของวันที่และส่งกลับจำนวนมิลลิวินาทีตั้งแต่

const unixTimeZero = Date.parse('01 Jan 1970 00:00:00 GMT');
const javaScriptRelease = Date.parse('04 Dec 1995 00:12:00 GMT');

console.log(unixTimeZero);
// expected output: 0

console.log(javaScriptRelease);
// expected output: 818035920000

สำรวจเพิ่มเติมได้ที่: Date.parse ()


0
Number(new Date(2010, 6, 26))

ทำงานในลักษณะเดียวกับสิ่งต่างๆข้างต้น หากคุณต้องการวินาทีอย่าลืม/ 1000

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.