JavaScript-두 날짜 사이에 분을 가져옵니다


156

날짜가 두 개인 경우 어떻게 사용할 수 있습니까 JavaScript 를 하여 두 날짜의 차이를 분 단위로 가져 오려면 어떻게해야합니까?


그것들은 데이트 대상입니까 아니면 문자열입니까?
situatin

답변:


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
이 답변을 테스트 할 때 오류가 발생했습니다. Date 객체에 분을 설정하면 DiffHrs가 잘못되었을 수 있습니다. 예를 들어 크리스마스가 "12-25-2015 03:55"이고 오늘이 "12-25-2015 02:00"이면 hourDiff는 2 시간입니다. 한 시간이되어야합니다.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);차이가 60 분을 초과하면 작동하지 않습니다
kuncevic.dev

3
적어도 몇 분 동안 제대로 작동하지 않는다는 것을 반복하십시오. 예를 들어, 62 분의 차이가 있었고 반올림으로 인해 2 분의 차이라고 생각했습니다.
Jordan

6
그것은 만 분의 차이를 계산하는 대신 질문에 올바르게 대답하지 않고, 일, 시간 및 분의 합성으로 계산됩니다 ... 차이가 1 일 1 시간 1 분이면 1을 표시합니다 1 시간 1 분, 1501 분 대신
Akhil Gupta

170

2 개의 Date 객체를 빼면 밀리 초 단위의 차이가 나타납니다. 예 :

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') 동일한 결과 제공).

결과를 1000으로 나누면 몇 초가 걸립니다. 60으로 나누면 몇 분이 걸립니다. 전체 분, 사용 라운드 Math.floorMath.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 시간의 차이가
있기

1
@Davatar 누가 같은가요? 그는 12 시간-0 시간은 0 시간-12 시간과 동일하다고 말합니다.
Mark Baijens

이전 답변이지만 new Date(string)ISO-8601 형식 문자열 이외의 형식과 함께 사용해서는 안됩니다 . Date.parse가 왜 잘못된 결과를 제공합니까?를 참조하십시오 . , 또는 숫자 만 사용하십시오 (예 : new Date(2011, 9, 9, 12, 0, 0)월은 0 기준 임).
Heretic Monkey

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 December

이전 답변이지만 new Date(string)ISO-8601 형식 문자열 이외의 형식과 함께 사용해서는 안됩니다 . Date.parse가 왜 잘못된 결과를 제공합니까?를 참조하십시오 . , 또는 숫자 만 사용하십시오 (예 : new Date(2011, 9, 9, 12, 0, 0)월은 0 기준 임).
Heretic Monkey

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 유형이어야합니다."라는 오류를 표시합니다. 오류를 피하기 위해(currDate.getTime() - oldDate.getTime()) / 60000
Homer

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/

moment.js의 CDN은 다음에서 사용할 수 있습니다.

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

감사.

편집하다:

mostDate 및 minorDate는 모멘트 유형이어야합니다.


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. 변환 millisecondsminutesms/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.