JavaScript - รับนาทีระหว่างวันที่สองวัน


156

หากฉันมีสองวันฉันจะใช้JavaScriptเพื่อรับความแตกต่างระหว่างสองวันในไม่กี่นาทีได้อย่างไร


พวกเขาเป็นวัตถุวันที่หรือเพียงแค่สตริง? โปรดยกตัวอย่าง
สถานการณ์

คำตอบ:


204

คุณสามารถชำระเงินรหัสนี้:

var today = new Date();
var Christmas = new Date("2012-12-25");
var diffMs = (Christmas - today); // milliseconds between now & Christmas
var diffDays = Math.floor(diffMs / 86400000); // days
var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
alert(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas 2009 =)");

หรือvar diffMins = Math.floor((...ทิ้งวินาทีหากคุณไม่ต้องการปัดเศษนาที


7
@philk นั่นคือเหตุผลที่ฉันให้ความสำคัญกับ StackOverflow ในกระดานข้อความจำนวนมากคำตอบนั้นเป็นเพียงไฮเปอร์ลิงก์ เราคงไม่ได้คำตอบที่ยอดเยี่ยมนี้หากเป็นกรณีนี้
Andrew Neely

5
ฉันพบข้อผิดพลาดเมื่อทดสอบคำตอบนี้: DiffHrs อาจผิดถ้าคุณตั้งค่านาทีในวัตถุ Date ตัวอย่างเช่นถ้าคริสมาสต์คือ "12-25-2015 03:55" และวันนี้คือ "12-25-2015 02:00" ดังนั้น hourDiff คือสองชั่วโมง ควรจะเป็นหนึ่งชั่วโมง
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);ไม่ทำงานเมื่อความแตกต่างมากกว่า 60 นาที
kuncevic.dev

3
ยืนยันว่าสิ่งนี้ทำงานไม่ถูกต้องอย่างน้อยนาที ตัวอย่างเช่นใช้เวลา 62 นาทีและเนื่องจากการปัดเศษคิดว่ามันต่างกัน 2 นาที
Jordan

6
ไม่ตอบคำถามได้อย่างถูกต้องแทนที่จะคำนวณความแตกต่างในเวลาเพียงไม่กี่นาทีความแตกต่างจะถูกคำนวณเป็นผลประกอบของวันชั่วโมงและนาที ... ดังนั้นหากความแตกต่างคือ 1 วัน 1 ชั่วโมง 1 นาทีมันจะแสดง 1 วัน 1 ชั่วโมง 1 นาทีแทนที่จะเป็น 1,501 นาที
Akhil Gupta

170

การลบวัตถุ 2 วันจะให้ความแตกต่างเป็นมิลลิวินาทีเช่น:

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));

Math.absใช้เพื่อให้สามารถใช้ความแตกต่างที่แน่นอน (ดังนั้นnew Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')ให้ผลลัพธ์เดียวกัน)

การหารผลลัพธ์ด้วย 1,000 ให้จำนวนวินาที การหารด้วย 60 จะให้จำนวนนาที ในการปัดเศษเป็นนาทีทั้งหมดให้ใช้Math.floorหรือMath.ceil:

var minutes = Math.floor((diff/1000)/60);

ในตัวอย่างนี้ผลลัพธ์จะเป็น 720


1
เจี๊ยก หรือสิ่งที่ต้องการ(Math.floor(seconds/60))+':'+((seconds/60)%60)ถ้าคุณต้องการวินาทีที่เหลือเช่นกัน
KooiInc

4
ฉันคิดว่านี่เป็นคำตอบที่ดีกว่าฉันสังเกตเห็นคำตอบที่ยอมรับได้ล้มเหลวในการแปลงความแตกต่างเป็นนาทีเมื่อความแตกต่างมากกว่า 60 นาที
sani

นี่เป็นสิ่งที่ผิดด้วย 12:00 ไม่สามารถเป็น 00:00 ได้เนื่องจากสิ่งเหล่านี้ต่างกัน 12 ชั่วโมง ...
Davatar

1
@Davatar ใครบอกว่าเหมือนกัน? เขาเพิ่งระบุว่า 12 ชั่วโมง - 0 ชั่วโมงเหมือนกับ 0 ชั่วโมง - 12 ชั่วโมง
Mark Baijens

คำตอบเก่า แต่คุณไม่ควรใช้new Date(string)กับรูปแบบอื่นนอกเหนือจากสตริงรูปแบบ ISO-8601 ดูเหตุใด Date.parse ให้ผลลัพธ์ที่ไม่ถูกต้อง หรือเพียงแค่ใช้ตัวเลข (เช่นnew Date(2011, 9, 9, 12, 0, 0)เพียงจำเดือนเป็น 0)
Monkey Heretic

52
var startTime = new Date('2012/10/09 12:00'); 
var endTime = new Date('2013/10/09 12:00');
var difference = endTime.getTime() - startTime.getTime(); // This will give difference in milliseconds
var resultInMinutes = Math.round(difference / 60000);

2
มันดีและเรียบง่ายและใช้งานได้สำหรับฉัน ฉันลบ. getTime () ออกจากวันที่เนื่องจากมีเหตุผลมากกว่าที่ฉันเห็นว่าเป็นความคิดที่จะเปรียบเทียบสองวัน ขอบคุณ
Yos

คำตอบเก่า แต่คุณไม่ควรใช้new Date(string)กับรูปแบบอื่นนอกเหนือจากสตริงรูปแบบ ISO-8601 ดูเหตุใด Date.parse ให้ผลลัพธ์ที่ไม่ถูกต้อง หรือเพียงแค่ใช้ตัวเลข (เช่นnew Date(2011, 9, 9, 12, 0, 0)เพียงจำเดือนเป็น 0)
Monkey Heretic

46

ฟังก์ชั่นง่าย ๆ ในการคำนวณนี้:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

24

นั่นควรจะแสดงความแตกต่างระหว่างสองวันในไม่กี่นาที ลองใช้ในเบราว์เซอร์ของคุณ:

const currDate = new Date('Tue Feb 13 2018 13:04:58 GMT+0200 (EET)')
const oldDate  = new Date('Tue Feb 13 2018 12:00:58 GMT+0200 (EET)')


(currDate - oldDate) / 60000 // 64

4
TypeScript จะให้ข้อผิดพลาด "ด้านซ้ายและด้านขวาของการดำเนินการทางคณิตศาสตร์ต้องเป็นประเภท 'any', 'number' หรือ enum type" เพื่อหลีกเลี่ยงข้อผิดพลาดทำ(currDate.getTime() - oldDate.getTime()) / 60000
โฮเมอร์

12

สำหรับคนที่ชอบทำงานกับคนจำนวนน้อย

const today = new Date();
const endDate = new Date(startDate.setDate(startDate.getDate() + 7));
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000 * 60) % 60);
const seconds = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000) % 60); 

9

ปัญหานี้แก้ไขได้อย่างง่ายดายด้วย moment.js เช่นตัวอย่างนี้:

var difference = mostDate.diff(minorDate, "minutes");

พารามิเตอร์ที่สองสามารถเปลี่ยนแปลงได้สำหรับพารามิเตอร์อื่น ๆ ดูเอกสาร moment.js

เช่น: "วัน", "ชั่วโมง", "นาที" ฯลฯ

http://momentjs.com/docs/

CDN สำหรับ moment.js มีให้ที่นี่:

https://cdnjs.com/libraries/moment.js

ขอบคุณ

แก้ไข:

ส่วนใหญ่วันที่และวันรองลงมาควรเป็นประเภทช่วงเวลา


2

นี่คือความสนุกที่ฉันได้แก้บางอย่างที่คล้ายกันในโหนด

function formatTimeDiff(date1, date2) {
  return Array(3)
    .fill([3600, date1.getTime() - date2.getTime()])
    .map((v, i, a) => {
      a[i+1] = [a[i][0]/60, ((v[1] / (v[0] * 1000)) % 1) * (v[0] * 1000)];
      return `0${Math.floor(v[1] / (v[0] * 1000))}`.slice(-2);
    }).join(':');
}

const millis = 1000;
const utcEnd = new Date(1541424202 * millis);
const utcStart = new Date(1541389579 * millis);
const utcDiff = formatTimeDiff(utcEnd, utcStart);

console.log(`Dates:
  Start   : ${utcStart}
  Stop    : ${utcEnd}
  Elapsed : ${utcDiff}
  `);

/*
Outputs:

Dates:
  Start   : Mon Nov 05 2018 03:46:19 GMT+0000 (UTC)
  Stop    : Mon Nov 05 2018 13:23:22 GMT+0000 (UTC)
  Elapsed : 09:37:02
*/

คุณสามารถดูการทำงานได้ที่https://repl.it/@GioCirque/TimeSpan-Formatting


0

รหัสต่อไปนี้ทำงานให้ฉัน

function timeDiffCalc(dateNow,dateFuture) {
    var newYear1 = new Date(dateNow);
    var newYear2 = new Date(dateFuture);

        var dif = (newYear2 - newYear1);
        var dif = Math.round((dif/1000)/60);
        console.log(dif);

}

0

คุณสามารถทำได้ดังนี้:

  1. รับdifference of dates(ความแตกต่างจะเป็นมิลลิวินาที)
  2. แปลงmillisecondsเข้ามาminutesคือms/1000/60

รหัส:

let dateOne = new Date("2020-07-10");
let dateTwo = new Date("2020-07-11");

let msDifference =  dateTwo - dateOne;
let minutes = Math.floor(msDifference/1000/60);
console.log("Minutes between two dates =",minutes);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.