JavaScript - Nhận phút giữa hai ngày


156

Nếu tôi có hai ngày, làm cách nào tôi có thể sử dụng JavaScript để có sự khác biệt giữa hai ngày tính bằng phút?


chúng là đối tượng ngày hay chỉ là chuỗi? vui lòng cho một ví dụ situatin
amosrivera

Câu trả lời:


204

Bạn có thể kiểm tra mã này:

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 =)");

hoặc var diffMins = Math.floor((...loại bỏ giây nếu bạn không muốn làm tròn số phút.


7
@philk, đó là lý do tại sao tôi coi trọng StackOverflow rất nhiều. Trong nhiều bảng tin, câu trả lời chỉ là một siêu liên kết. Chúng tôi sẽ không có câu trả lời tuyệt vời này nếu đó là trường hợp ở đây.
Andrew Neely

5
Tôi đã tìm thấy một lỗi khi kiểm tra câu trả lời này: DiffHrs có thể sai Nếu bạn đặt số phút trong đối tượng Ngày. Ví dụ: nếu Giáng sinh là "12-25-2015 03:55" và hôm nay là "12-25-2015 02:00" thì giờDiff là hai giờ. Nên là một giờ.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);không hoạt động khi chênh lệch lớn hơn 60 phút
kuncevic.dev

3
Lặp lại rằng điều này KHÔNG hoạt động đúng, ít nhất là trong vài phút. Ví dụ, mất khoảng 62 phút và do làm tròn số, nghĩ rằng đó là chênh lệch 2 phút.
Jordan

6
nó không trả lời đúng câu hỏi, thay vì tính chênh lệch trong CHỈ phút, sự khác biệt được tính là tổng hợp của ngày, giờ và phút ... do đó, nếu chênh lệch là 1 ngày 1 giờ 1 phút, nó sẽ hiển thị 1 ngày 1 giờ 1 phút, thay vì 1501 phút
Akhil Gupta

170

Trừ 2 đối tượng Ngày cung cấp cho bạn sự khác biệt tính bằng mili giây, ví dụ:

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

Math.absđược sử dụng để có thể sử dụng sự khác biệt tuyệt đối (do đó new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')cho kết quả tương tự).

Chia kết quả cho 1000 sẽ cho bạn số giây. Chia cho 60 cho bạn số phút. Để làm tròn đến toàn bộ phút, sử dụng Math.floorhoặc Math.ceil:

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

Trong ví dụ này, kết quả sẽ là 720


1
Yip. Hoặc đại loại như (Math.floor(seconds/60))+':'+((seconds/60)%60)nếu bạn cũng cần những giây còn lại
KooiInc

4
Tôi nghĩ rằng đây là câu trả lời tốt hơn, tôi nhận thấy câu trả lời được chấp nhận không chuyển đổi sự khác biệt thành phút khi sự khác biệt là hơn 60 phút
sani

Điều này cũng sai. 12:00 không thể giống như 00:00, vì đây là 12 giờ chênh lệch ...
Davatar

1
@Davatar ai nói họ giống nhau? ông chỉ nói rằng 12 giờ - 0 giờ giống như 0 giờ - 12 giờ.
Đánh dấu Baijens

Câu trả lời cũ, nhưng bạn không bao giờ nên sử dụng new Date(string)với định dạng khác với chuỗi định dạng ISO-8601. Xem tại sao Date.parse cho kết quả không chính xác? hoặc chỉ sử dụng số (ví dụ: new Date(2011, 9, 9, 12, 0, 0)chỉ cần nhớ tháng là 0 dựa).
Khỉ 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
Điều này là tốt đẹp và đơn giản và làm việc cho tôi. Tôi đã loại bỏ .getTime () khỏi các ngày mặc dù nó có vẻ hợp lý hơn đối với tôi vì ý tưởng là so sánh hai ngày. Cảm ơn.
Yos 31/12/13

Câu trả lời cũ, nhưng bạn không bao giờ nên sử dụng new Date(string)với định dạng khác với chuỗi định dạng ISO-8601. Xem tại sao Date.parse cho kết quả không chính xác? hoặc chỉ sử dụng số (ví dụ: new Date(2011, 9, 9, 12, 0, 0)chỉ cần nhớ tháng là 0 dựa).
Khỉ Heretic

46

Một hàm đơn giản để thực hiện phép tính này:

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

24

Điều đó sẽ cho thấy sự khác biệt giữa hai ngày trong vài phút. Hãy thử nó trong trình duyệt của bạn:

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 sẽ cung cấp cho bạn lỗi "Phía bên trái và bên phải của một phép toán số học phải là loại 'bất kỳ', 'số' hoặc loại enum". Để tránh lỗi, hãy làm(currDate.getTime() - oldDate.getTime()) / 60000
Homer

12

Dành cho những người thích làm việc với số lượng nhỏ

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

Vấn đề này được giải quyết dễ dàng với khoảnh khắc.js, như ví dụ này:

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

Tham số thứ hai có thể được thay đổi cho các tham số khác, xem tài liệu về khoảnh khắc.

ví dụ: "ngày", "giờ", "phút", v.v.

http://momentjs.com/docs/

CDN cho khoảnh khắc.js có sẵn ở đây:

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

Cảm ơn.

BIÊN TẬP:

mostDate và juniorDate nên là một loại thời điểm.


2

Đây là một số niềm vui tôi đã giải quyết một cái gì đó tương tự trong nút.

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
*/

Bạn có thể thấy nó hoạt động tại https://repl.it/@GioCirque/TimeSpan-Formatted


0

Các mã sau đây làm việc cho tôi,

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

Bạn có thể làm như sau:

  1. Nhận difference of dates(Sự khác biệt sẽ được tính bằng mili giây)
  2. Chuyển đổi millisecondsthành minutestức làms/1000/60

Mật mã:

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.