จะคำนวณมิลลิวินาทีตั้งแต่เริ่มต้นวันได้อย่างไร?

ฉันได้ระบุเวลาที่แน่นอนในวันที่กำหนด ตอนนี้ฉันต้องการคำนวณมิลลิวินาทีจากจุดเริ่มต้นของวันที่กำหนดนั้นจนถึงเวลาที่กำหนดของวันนั้น ฉันหวังว่าจะทำเช่นนั้นด้วยโค้ดด้านล่าง แต่กลับไม่แสดงอะไรเลย ผมทำอะไรผิดหรือเปล่า?

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01").getTime();
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0); 
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

var div = document.getElementById('result'); 
div.innerText = countDownTime;

ฉันระบุ countDownDate จากนั้น ฉันทำเครื่องหมายจุดเริ่มต้นของ countDownDate นั้นลงในตัวแปร countDownStart ต่อไป ฉันจะคำนวณเวลาที่ผ่านไปตั้งแต่ 00:00 น. ของวันที่ 10 มกราคม ถึง 00:01 น. ของวันที่ 10 มกราคม ด้วยการลบ countDownStart จาก countDownDate แต่ไม่เห็นผล...


person jiggy1965    schedule 06.01.2018    source แหล่งที่มา
comment
คุณสามารถใช้ Moment Library. มันจะมีประโยชน์   -  person zabusa    schedule 06.01.2018
comment
@31piy บางครั้งมันก็ง่ายที่จะเข้าใจ การทำสิ่งต่างๆ มากมายเหล่านี้   -  person zabusa    schedule 06.01.2018
comment
@ 31piy ทุกวันนี้มีบันเดิลและวิธีการมากมายในการลดขนาดบันเดิลหากเขาต้องการโหลดไลบรารีที่เขาขี้เกียจโหลดด้วย ดังนั้นนั่นก็ขึ้นอยู่กับ   -  person zabusa    schedule 06.01.2018
comment
@ 31piy โอ้ .. แต่ยังมีวิธีการมากมายในการจัดการกับ that.eg.zip.lazy กำลังโหลด ฯลฯ ดังนั้นการอ่านจะต้องได้รับการดูแล   -  person zabusa    schedule 06.01.2018
comment
โปรดอย่าใช้ตัวแยกวิเคราะห์ในตัว ดู ทำไมถึงเป็น Date .parse ให้ผลลัพธ์ที่ไม่ถูกต้อง. แทนที่จะใช้ new Date("January 10, 2018 00:01") ให้ใช้ new Date(2018, 0, 10, 0, 1) ซึ่งไม่เพียงแต่มีประสิทธิภาพมากกว่า แต่ยังพิมพ์น้อยกว่าอีกด้วย ;-) นอกจากนี้ ไม่ใช่ว่าทุกวันจะมีความยาว 24 ชั่วโมงซึ่งสังเกตเวลาออมแสง (บางวันนานกว่า บางวันสั้นกว่า)   -  person RobG    schedule 07.01.2018


คำตอบ (2)


ตรรกะของคุณดีที่นี่ ปัญหาเดียวคือบรรทัดนี้ที่นี่:

var countDownDate = new Date("January 10, 2018 00:01").getTime();

เนื่องจากคุณใช้ .getTime() ตัวแปร countDownDate จึงไม่ใช่วันที่อีกต่อไป ดังนั้นในคำสั่งต่อไปนี้countDownDate.getFullYear() และการส่งต่อจะไม่ทำงาน เพียงลบ .getTime() และมันจะทำงานได้ตามที่คาดไว้:

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01");
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0); 
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

console.log(countDownTime)

person Spencer Wieczorek    schedule 06.01.2018
comment
ไม่จำเป็นต้องมี getTime เลย ความแตกต่างอาจเป็นเพียง countDownDate - countDownStart ;-) - person RobG; 07.01.2018

รหัสของคุณมีปัญหาเดียวเท่านั้น นั่นคือคุณได้กำหนดผลลัพธ์ของ .getTime() ให้กับ countDownDate ซึ่งจะเป็นตัวเลข

นั่นเป็นสาเหตุที่ JavaScript ไม่สามารถเรียก getFullYear หรือฟังก์ชันอื่นๆ บนหมายเลขนั้นได้ เพราะนั่นจะเป็นการโทรที่ไม่ถูกต้อง

หากต้องการแก้ไขปัญหาดังกล่าว เพียงลบ .getTime() ออก แล้วมันก็จะทำงานได้ดี

var now = new Date().getTime();
var oneday = 1000 * 60 * 60 * 24;
var countDownDate = new Date("January 10, 2018 00:01");
var countDownStart = new Date(countDownDate.getFullYear(), countDownDate.getMonth(), countDownDate.getDate(), 0, 0, 0, 0);
var countDownTime = countDownDate.getTime() - countDownStart.getTime();

var div = document.getElementById('result');
div.innerText = countDownTime;
<div id="result">
  <div>

person 31piy    schedule 06.01.2018
comment
ดูเหมือนว่าคุณจะเอาชนะฉันภายในไม่กี่วินาที :) - person Spencer Wieczorek; 06.01.2018