두 날짜의 날짜 정보가 동일한 지 확인


82

두 개의 다른 날짜 개체가 같은 날짜 정보 (같은 일, 월, 연도 ...)를 가지고 있는지 어떻게 확인할 수 있습니까? "==", "==="및 .equals를 시도했지만 작동하지 않는 것 같습니다.

답변:


136

valueOf()또는 getTime()다음을 사용할 수 있습니다 .

a = new Date(1995,11,17);
b = new Date(1995,11,17);

a.getTime() === b.getTime() // prints true

18
>=값의 경우 숫자로 변환되기 때문입니다. ==개체가 자체적으로 비교되는 경우 ( a == a만약 참일 것입니다).
Felix Kling

8
이 솔루션을 사용하려면 날짜가 날짜 부분으로 만 구성되어야하지만이 질문에 오는 많은 사람들은 다른 요구 사항을 가질 수 있습니다 ( 예 : jsFiddle의 시간 부분 사용 )
KyleMit

1
따라서 이것을 사용할 때 setHours 기능 덕분에 시간 부분이 0으로 설정되어 있는지 확인하십시오 .a.setHours(0,0,0,0);
COil

밀리 초 차이가 있으면 작동하지 않습니다. getTime()시간을 밀리 초 단위로 반환 하므로 두 시간 모두 밀리 초 차이를 가질 수 있습니다. 이 솔루션에서는 예상대로 작동하지 않습니다. 사용해보세요toDateString()
Rehan Sattar

41

시간에 관계없이 날짜가 같은 날에 발생하는지 확인하는 데만 관심이있는 경우 toDateString() 방법 을 사용하여 비교할 수 있습니다 . 이 메서드는 시간없이 날짜 만 반환합니다.

var start = new Date('2015-01-28T10:00:00Z');
var end = new Date('2015-01-28T18:00:00Z');

if (start.toDateString() === end.toDateString()) {
  // Same day - maybe different times
} else {
  // Different day
}

39

이 코드를 사용했습니다.

Date.prototype.isSameDateAs = function(pDate) {
  return (
    this.getFullYear() === pDate.getFullYear() &&
    this.getMonth() === pDate.getMonth() &&
    this.getDate() === pDate.getDate()
  );
}

그런 다음 다음과 같이 호출하십시오. if (aDate.isSameDateAs(otherDate)) { ... }


getTime ()을 두 번만 사용할 수 있는데 왜 12 개의 함수를 실행합니까? 아, 시간, 월, 연도의 차이를 무시하는 것에 대해 생각하고 계셨습니까? 이 경우 시간대 고려 사항이 중요하기 시작합니까?
ErikE 2011 년

12
질문 이었기 때문에 "두 개의 서로 다른 날짜 개체가 같은 날짜 정보가"이 코드는 그냥하지 : 시간에 관계없이 날짜를 비교
Incidently

2
어, "시, 분, 초의 차이를 무시하고"라고 말하려고 했어요
ErikE

14

정수로 유형 변환 :

a = new Date(1995,11,17);
b = new Date(1995,11,17);
+a === +b;  //true

4
단항 연산자의 최고 사용
KingOfHypocrites

6

헬 나르,

당신은 시도 할 수 있습니다 (함수 이름 :)-getTime이 아닌 felix의 valueof에 따라 수정 됨)

function isEqual(startDate, endDate) {
    return endDate.valueOf() == startDate.valueOf();
}

용법:

if(isEqual(date1, date2)){
   // do something
}

거기에 당신을 데려다 줄 수도 있습니다.

또한보십시오:

'http://www.java2s.com/Tutorial/JavaScript/0240__Date/DatevalueOf.htm'


4

더 나은 날짜 지원을 위해 moment.jsisSame 메서드를 사용하십시오.

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-04-06').startOf('day');

console.log(starDate.isSame(endDate)); // false ( month is different )

var starDate = moment('2018-03-06').startOf('day');
var endDate  = moment('2018-03-06').startOf('day');

console.log(starDate.isSame(endDate)); // true ( year, month and day are the same )

3

그들을 빼고 0과 비교하십시오.

var date1 = new Date();
var date2 = new Date();

// 날짜로 무언가를합니다 ...

(date1 - date2) ? alert("not equal") : alert("equal");

변수에 넣으려면 :

var datesAreSame = !(date1 - date2);

3

시간 부분을 무시하고 두 날짜가 같은지 확인하기위한 간단한 한 줄 대안 :

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

날짜 a와 b가 하루 이상 다르지 않고 같은 요일을 공유하는지 여부를 결정합니다.

function isSameDate(a, b) {
    return Math.abs(a - b) < (1000 * 3600 * 24) && a.getDay() === b.getDay();
}

console.log(isSameDate(new Date(2017, 7, 21), new Date(2017, 7, 21))); //exact same date => true
console.log(isSameDate(new Date(2017, 7, 21, 23, 59, 59), new Date(2017, 7, 21))); //furthest same dates => true
console.log(isSameDate(new Date(2017, 7, 20, 23, 59, 59), new Date(2017, 7, 21))); //nearest different dates => false
console.log(isSameDate(new Date(2016, 7, 21), new Date(2017, 7, 21))); //different year => false
console.log(isSameDate(new Date(2017, 8, 21), new Date(2017, 7, 21))); //different month => false

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.