JavaScript에서 시간을 비교하지 않고 날짜 부분 만 비교


397

아래 코드에 어떤 문제가 있습니까?

아마도 시간이 아닌 날짜를 비교하는 것이 더 간단 할 것입니다. 이 작업을 수행하는 방법을 모르고 검색했지만 정확한 문제를 찾을 수 없습니다.

BTW, 두 날짜를 경고에 표시하면 정확히 동일하게 표시됩니다.

내 코드 :

window.addEvent('domready', function() {
    var now = new Date();
    var input = $('datum').getValue();
    var dateArray = input.split('/');
    var userMonth = parseInt(dateArray[1])-1;
    var userDate = new Date();
    userDate.setFullYear(dateArray[2], userMonth, dateArray[0], now.getHours(), now.getMinutes(), now.getSeconds(), now.getMilliseconds());

    if (userDate > now)
    {
        alert(now + '\n' + userDate);
    }
});

날짜를 비교하고 시간을 포함하지 않는 더 간단한 방법이 있습니까?

답변:


781

나는 여전히 JavaScript를 배우고 있으며 시간없이 두 날짜를 비교하는 데 도움이되는 유일한 방법 setHours은 Date 객체 의 메서드 를 사용 하고 시간, 분, 초 및 밀리 초를 0으로 설정하는 것입니다. 그런 다음 두 날짜를 비교하십시오.

예를 들어

date1 = new Date()
date2 = new Date(2011,8,20)

date2은시, 분, 초 및 밀리 초로 0으로 설정되지만 date1은 date1이 작성된 시간으로 설정됩니다. date1에서 시간, 분, 초 및 밀리 초를 제거하려면 다음을 수행하십시오.

date1.setHours(0,0,0,0)

이제 시간 요소에 대한 걱정없이 두 날짜를 DATES로 비교할 수 있습니다.


63
에 의한 테스트 date1 === date2는 일관된 동작을 제공하지 않는 것 같습니다. date1.valueOf() === b.valueOf()또는 더하는 것이 좋습니다 date1.getTime() === date2.getTime(). 기묘.
Erwin Wessels

4
주의 사항 : date1과 date2가 겨울과 여름에 있고 addDays (1)를 사용하여 서로 반복 할 계획이라면 일광 절약으로 인해 시간대가 동일하지 않으므로 문제가 발생합니다. 두 날짜가 실제로 00 : 00 : 00 : 0이 아니기 때문에 동일한 날짜를 지정해야 작동하지 않습니다.
Oliver

9
나는 이것이 오래된 질문이라는 것을 알고 있지만 검색 할 때 구글에서 먼저 나옵니다. 이 답변에주의하십시오. 사용자가 날짜 개체의 작성자와 동일한 시간대에 있지 않으면 잘못된 답변을 제공합니다. 예를 들어, 컴퓨터 OS의 시간대를 미국 동부 표준시로 변경하십시오. 브라우저의 콘솔을 열고을 입력하십시오 var date2 = new Date(2011,8,20). 이제 OS 시간대를 태평양 표준시 (미국)로 변경하십시오. 동일한 브라우저 콘솔 유형으로 20 일 화요일이 아니라 date2.toDateString()다시 돌아옵니다 Mon Sep 19 2011!
Adam

9
또한 setHours()브라우저에서 자동으로 감지하는 현재 시간대를 기준으로 시간 을 설정합니다. : 시도 t = new Date("2016-02-29T01:45:49.098Z"); t.setHours(0,0,0,0); console.log(t.toJSON());인쇄 할 "2016-02-28T15:00:00.000Z"날짜 28 아니라 29 내 현재 시간대입니다Asia/Tokyo
transang

8
이 답변 setUTCxxx은 로컬 / 시간대 인식 변형 대신 메소드 를 사용하도록 업데이트해야합니다 .
Stijn de Witt

136

타임 존이되기 전에

날짜 객체를 사용하여 날짜를 바로 표현하면 엄청난 정밀도 문제가 발생합니다. 시간과 시간대를 관리하여 시간을 절약해야하며 어느 단계에서나 다시 몰래 들어갈 수 있습니다. 이 질문에 대한 대답은 함정에 빠지게됩니다.

자바 스크립트 날짜에는 시간대 개념없습니다 . 기본적으로 장치의 "로컬"시간대 또는 지정된 경우 UTC 또는 다른 시간대를 사용하여 문자열을주고받는 편리한 (정적) 기능을 갖춘 순간 (에포크 이후의 틱)입니다. 날짜 객체로 just-a-date ™ 를 나타내려면 날짜가 해당 날짜의 시작 부분에 UTC 자정을 나타내기를 원합니다. 이것은 생성의 계절이나 시간대에 관계없이 날짜로 작업 할 수있게하는 일반적이고 필요한 규칙입니다. 따라서 자정 UTC Date 객체를 만들거나 직렬화 할 때 시간대 개념을 관리하려면 매우주의해야합니다.

콘솔의 기본 동작으로 인해 많은 사람들이 혼동됩니다. 콘솔에 날짜를 뿌릴 경우 시간대가 포함 된 출력이 표시됩니다. 이것은 콘솔이 toString()날짜를 부르고 toString()현지 에서 설명하기 때문 입니다. 기본 날짜 는 시간대가 없습니다 ! (시간이 표준 시간대 오프셋과 일치하는 한 자정 UTC 날짜 개체가 있습니다)

역 직렬화 (또는 자정 UTC Date 객체 생성)

이것은 반올림 단계이며, 두 가지 "올바른"답변이 있습니다. 대부분의 경우, 날짜는 사용자의 시간대를 반영하기를 원할 것입니다. 오늘이 생일이라면 클릭하십시오 . NZ와 미국 사용자는 동시에 클릭하여 다른 날짜를 얻습니다. 이 경우, 이렇게하십시오 ...

// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));

때로는 국제 비교가 지역 정확도보다 우월합니다. 이 경우, 이렇게하십시오 ...

// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate()));

날짜를 역 직렬화

유선 날짜는 종종 YYYY-MM-DD 형식입니다. 역 직렬화하려면 다음을 수행하십시오.

var midnightUTCDate = new Date( dateString + 'T00:00:00Z');

직렬화

시간대를 만들 때주의를 기울인 후에는 문자열 표현으로 다시 변환 할 때 시간대를 유지해야합니다. 안전하게 사용할 수 있습니다 ...

  • toISOString()
  • getUTCxxx()
  • getTime() //returns a number with no time or timezone.
  • .toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.

그리고 다른 모든 것을 특히 피하십시오.

  • getYear(), getMonth(),getDate()

질문에 대답하기 위해 7 년이 너무 늦었습니다.

<input type="date" onchange="isInPast(event)">
<script>
var isInPast = function(event){
  var userEntered = new Date(event.target.valueAsNumber); // valueAsNumber has no time or timezone!
  var now = new Date();
  var today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() ));
  if(userEntered.getTime() < today.getTime())
    alert("date is past");
  else if(userEntered.getTime() == today.getTime())
    alert("date is today");
  else
    alert("date is future");

}
</script>

실행 중인지 확인하십시오 ...

2019 업데이트 ... 무료 ...

이 답변의 인기를 감안할 때 코드에 모두 넣었습니다. 다음 함수는 랩핑 된 날짜 오브젝트를 리턴하고 just-a-date ™와 함께 사용하기에 안전한 함수 만 노출합니다.

Date 객체로 호출하면 사용자의 시간대를 반영하여 JustADate로 해석됩니다. 문자열로 호출하십시오. 문자열이 시간대가 지정된 ISO 8601이면 시간 부분을 반올림합니다. 시간대를 지정하지 않으면 날짜 객체와 마찬가지로 현지 시간대를 반영하는 날짜로 변환됩니다.

function JustADate(initDate){
  var utcMidnightDateObj = null
  // if no date supplied, use Now.
  if(!initDate)
    initDate = new Date();

  // if initDate specifies a timezone offset, or is already UTC, just keep the date part, reflecting the date _in that timezone_
  if(typeof initDate === "string" && initDate.match(/((\+|-)\d{2}:\d{2}|Z)$/gm)){  
     utcMidnightDateObj = new Date( initDate.substring(0,10) + 'T00:00:00Z');
  } else {
    // if init date is not already a date object, feed it to the date constructor.
    if(!(initDate instanceof Date))
      initDate = new Date(initDate);
      // Vital Step! Strip time part. Create UTC midnight dateObj according to local timezone.
      utcMidnightDateObj = new Date(Date.UTC(initDate.getFullYear(),initDate.getMonth(), initDate.getDate()));
  }

  return {
    toISOString:()=>utcMidnightDateObj.toISOString(),
    getUTCDate:()=>utcMidnightDateObj.getUTCDate(),
    getUTCDay:()=>utcMidnightDateObj.getUTCDay(),
    getUTCFullYear:()=>utcMidnightDateObj.getUTCFullYear(),
    getUTCMonth:()=>utcMidnightDateObj.getUTCMonth(),
    setUTCDate:(arg)=>utcMidnightDateObj.setUTCDate(arg),
    setUTCFullYear:(arg)=>utcMidnightDateObj.setUTCFullYear(arg),
    setUTCMonth:(arg)=>utcMidnightDateObj.setUTCMonth(arg),
    addDays:(days)=>{
      utcMidnightDateObj.setUTCDate(utcMidnightDateObj.getUTCDate + days)
    },
    toString:()=>utcMidnightDateObj.toString(),
    toLocaleDateString:(locale,options)=>{
      options = options || {};
      options.timezone = "UTC";
      locale = locale || "en-EN";
      return utcMidnightDateObj.toLocaleDateString(locale,options)
    }
  }
}


// if initDate already has a timezone, we'll just use the date part directly
console.log(JustADate('1963-11-22T12:30:00-06:00').toLocaleDateString())


3
귀하의 답변에는 정말 유용한 정보가 포함되어 있습니다! 불행히도 실제로 OP의 실제 질문에 대한 답변을 추가하지 않아서 질문을 피할 수 없습니다. OP의 질문에 대답하는 작은 코드 스 니펫을 추가하십시오.
Stijn de Witt

하하하 @ '7 년이 너무 늦었다'! 나는 당신의 스타일 user1585345를 좋아합니다! 당신은 내 투표를 얻었다!
Stijn de Witt

나는 이것이 도움이된다는 것을 알았다. "국제 비교 가능성"스 니펫에는 오타가 있습니다. 나는 그것이 있어야한다고 생각한다 : new Date (Date.UTC (myDate.getUTCFullYear (), myDate.getUTCMonth (), myDate.getUTCDate ()));
RikRak

1
이 답변을 100 번 공표 할 수 있기를 바랍니다 !!!
Sнаđошƒӽ

77

이건 어때요?

Date.prototype.withoutTime = function () {
    var d = new Date(this);
    d.setHours(0, 0, 0, 0);
    return d;
}

변수 값에 영향을 미치지 않고 다음과 같이 날짜의 날짜 부분을 비교할 수 있습니다.

var date1 = new Date(2014,1,1);
new Date().withoutTime() > date1.withoutTime(); // true

이것은 원래 게시물에 대한 가장 우아한 답변입니다. 내 목적을 위해 별도의 함수를 만들지 않고 두 줄의 코드 만 포함했습니다.
Danimal Reks

25

Moment.js 사용

타사 라이브러리를 포함시킬 수있는 옵션이 있다면 Moment.js를 살펴볼 가치가 있습니다. 이 작업을하게 Date하고 DateTime훨씬, 훨씬 쉽다.

예를 들어, 하나의 날짜가 다른 날짜 뒤에 오지만 시간을 제외하면 다음과 같이 할 수 있습니다.

var date1 = new Date(2016,9,20,12,0,0); // October 20, 2016 12:00:00
var date2 = new Date(2016,9,20,12,1,0); // October 20, 2016 12:01:00

// Comparison including time.
moment(date2).isAfter(date1); // => true

// Comparison excluding time.
moment(date2).isAfter(date1, 'day'); // => false

당신이에 전달하는 두 번째 매개 변수는 isAfter비교를 할 수있는 정밀하고도 될 수 있습니다 year, month, week, day, hour, minute또는 second.


4
momentjs 솔루션에서 Date () + sethours 솔루션으로 100 배의 속도 향상. 조심 친구 :-)
2c2c

@ 2c2c 흥미 롭습니다. 성능 영향을 아는 것이 좋습니다. 벤치 마크에 얼마나 많은 작업을 사용 했습니까?
Joshua Pinter

1
나는 약 1mil 비교했다. 실제 벤치 마크를 설정하지
않음

17

아래와 같이 .toDateString을 사용하여 간단히 비교하십시오.

new Date().toDateString();

이렇게하면 다음과 같이 시간이나 시간대가 아닌 날짜 부분 만 반환됩니다.

"2017 년 2 월 3 일 금요일"

따라서 두 날짜 모두 시간 형식없이이 형식으로 비교할 수 있습니다.


2
좋은 시작이지만 이제는 문자열이기 때문에 비교를 할 수 없습니다. 비교하려면 다음을 수행하여 Date 객체로 다시 변경하십시오. new Date(new Date().toDateString());
Grid Trekkor

@GridTrekkor 사실이지만 빠른 평등 테스트를 원한다면 이것이 가장 간단한 해결책입니다.
CM

8

이것은 좀 더 깔끔한 버전 일 수 있습니다. 또한 parseInt를 사용할 때는 항상 기수를 사용해야합니다.

window.addEvent('domready', function() {
    // Create a Date object set to midnight on today's date
    var today = new Date((new Date()).setHours(0, 0, 0, 0)),
    input = $('datum').getValue(),
    dateArray = input.split('/'),
    // Always specify a radix with parseInt(), setting the radix to 10 ensures that
    // the number is interpreted as a decimal.  It is particularly important with
    // dates, if the user had entered '09' for the month and you don't use a
    // radix '09' is interpreted as an octal number and parseInt would return 0, not 9!
    userMonth = parseInt(dateArray[1], 10) - 1,
    // Create a Date object set to midnight on the day the user specified
    userDate = new Date(dateArray[2], userMonth, dateArray[0], 0, 0, 0, 0);

    // Convert date objects to milliseconds and compare
    if(userDate.getTime() > today.getTime())
    {
            alert(today+'\n'+userDate);
    }
});

기수에 대한 자세한 내용은 MDC 구문 분석 페이지를 확인하십시오.

JSLint 는 누락 된 기수와 같은 것들을 포착하고 모호하고 디버깅하기 어려운 오류를 잡을 수있는 훌륭한 도구입니다. 더 나은 코딩 표준을 사용하도록하여 향후 두통을 피할 수 있습니다. 코드를 작성하는 모든 JavaScript 프로젝트에서 사용합니다.


@EmKay ES5가 대부분의 브라우저에서 상당히 표준 적이기 때문에 이제는 큰 문제가되어서는 안되며 8 진수 해석을 금지 하지만 일부 브라우저는 이전 버전과의 호환성을 위해 여전히 오래된 8 진수 해석을 사용하고 있으므로 기수를 계속 사용합니다. 가까운 미래를 위해.
쓸모없는 코드

엄격한 모드 를 사용하면 8 진 해석에서 오류가 발생하는데, 이는 잘못 해석 될 수있는 오류를 찾는 데 도움이되므로 좋은 방법입니다.
쓸모없는 코드


4

시간 구성 요소가없는 날짜 만 진정으로 비교하는 경우 잘못된 느낌이 들지만 작동하고 모든 Date()시간과 시간대 두통을 피하는 다른 솔루션은 문자열 비교를 사용하여 ISO 문자열 날짜를 직접 비교하는 것입니다.

> "2019-04-22" <= "2019-04-23"
true
> "2019-04-22" <= "2019-04-22"
true
> "2019-04-22" <= "2019-04-21"
false
> "2019-04-22" === "2019-04-22"
true

다음을 사용하여 현재 날짜 (UTC 날짜, 필요하지 않은 사용자의 현지 날짜)를 얻을 수 있습니다.

> new Date().toISOString().split("T")[0]
"2019-04-22"

그것을 선호하는 나의 주장은 프로그래머의 단순성입니다. 아마도 속도를 희생하면서 날짜 시간과 오프셋을 올바르게 처리하려고 시도하는 것보다 이것을 버릴 가능성이 훨씬 적습니다 (성능을 비교하지 않았습니다)


당신은 또한 할 수 있습니다 new Date().toISOString().substr(0, 10) // "2019-04-22".
Stomy

현지 날짜 (UTC가 아닌 날짜)의 경우을 사용할 수 있습니다 new Date().toLocaleDateString() // "8/26/2019". 그러나 텍스트를 비교하는 것은 정확하지 않습니다 ( "8/26/2019" >= "9/29/2001"거짓 처럼 ). 따라서 new Date(new Date().toLocaleDateString())다른 날짜와 정확하게 비교하려면 변환해야합니다 .
Stomy

4

두 날짜 모두에 toDateString ()을 사용하십시오. toDateString은 시간을 포함하지 않으므로 같은 날짜에 2 번 동안 아래에 설명 된대로 값이 동일합니다.

var d1 = new Date(2019,01,01,1,20)
var d2 = new Date(2019,01,01,2,20)
console.log(d1==d2) // false
console.log(d1.toDateString() == d2.toDateString()) // true

분명히이 질문의 다른 곳에 표현 된 시간대 문제 중 일부는 유효하지만 많은 시나리오에서 관련이 없습니다.


1
필자의 경우이 솔루션은 선택한 답변과 투표가 많은 답변보다 훨씬 낫습니다. "시간을 비교하지 않고"라는 제목에서이 솔루션은 정확하게 그렇게하므로 비교 조작 시간을 설정하지 않아도됩니다. "이벤트 X와 이벤트 Y가 같은 날에 발생 했습니까?"라고 대답하려면 "이벤트 X 날짜의 00 : 00 : 00.00 AM이 00:00과 정확히 동일합니다"라는 대답보다는 날짜 만 비교하는 것이 좋습니다. Y 이벤트 날짜의 00.00? " 그것은 다른 많은 응답자들이하는 일입니다
Mr.K

3

이것이 내가하는 방법입니다.

var myDate  = new Date($('input[name=frequency_start]').val()).setHours(0,0,0,0);
var today   = new Date().setHours(0,0,0,0);
if(today>myDate){
    jAlert('Please Enter a date in the future','Date Start Error', function(){
        $('input[name=frequency_start]').focus().select();
    });
}

나는 현재 이것을 프로덕션에서 사용하고 있으며 문제 나 브라우저 비 호환성 등이 없습니다 ... 왜 당신 getTime()이 필요 하다고 말하는 이유 가 있습니까?
Fabrizio

5
setHours()호출 된 객체 를 수정하고 날짜를 밀리 초 (calling과 동일)로 반환합니다 getTime(). 따라서 today변수는 Date일부 객체가 예상 하는 객체 가 아니지만 실제로는 밀리 초의 정수입니다. 부작용으로 getTime()이미 모호한 방식을 가지고 있기 때문에 비교하기 전에 전화하지 않아도됩니다 .
Timothy Walters

3

여기에 비슷한 접근 방식이 보이지 않고 h / m / s / ms를 0으로 설정하는 것을 좋아하지 않습니다. date개체 가 변경된 현지 시간대로 정확하게 전환하는 데 문제가 발생할 수 있으므로 (그렇다고 가정합니다) 몇 분 전에 작성된 lil 함수를 여기에 소개하십시오.

+: 사용하기 쉽고 기본 비교 작업을 수행합니다 (일, 월 및 연도를 시간없이 비교)
-. 이것은 "즉시"사고와 완전히 반대되는 것 같습니다.

function datecompare(date1, sign, date2) {
    var day1 = date1.getDate();
    var mon1 = date1.getMonth();
    var year1 = date1.getFullYear();
    var day2 = date2.getDate();
    var mon2 = date2.getMonth();
    var year2 = date2.getFullYear();
    if (sign === '===') {
        if (day1 === day2 && mon1 === mon2 && year1 === year2) return true;
        else return false;
    }
    else if (sign === '>') {
        if (year1 > year2) return true;
        else if (year1 === year2 && mon1 > mon2) return true;
        else if (year1 === year2 && mon1 === mon2 && day1 > day2) return true;
        else return false;
    }    
}

용법:

datecompare(date1, '===', date2)동등 검사,
datecompare(date1, '>', date2)큰 검사,
!datecompare(date1, '>', date2)적은 검사 또는 같은 검사

또한, 분명히, 당신은 전환 할 수 있습니다 date1date2장소에서 다른 간단한 비교를 달성하기 위해.


멋진 플러스 플러스 플러스가 나를 도왔습니다. 이제 변환이 물지 않기를 바랍니다. 하하, thx.
edencorbin

3

날짜를 비교하는 효율적이고 올바른 방법은 다음과 같습니다.

Math.floor(date1.getTime() / 86400000) > Math.floor(date2.getTime() / 86400000);

시간 부분을 무시하고 다른 시간대에서 작동하며 동등성을 비교할 수도 ==있습니다. 86400000은 하루의 밀리 초 수입니다 ( = 24*60*60*1000).

등식 연산자 ==는 두 개의 Date 객체를 비교하고 두 날짜를 비교하지 않기 때문에 등식 테스트가 작동 할 것으로 예상 할 때 실패하므로 Date 객체를 비교하는 데 절대 사용 해서는 안됩니다 .

> date1;
outputs: Thu Mar 08 2018 00:00:00 GMT+1300

> date2;
outputs: Thu Mar 08 2018 00:00:00 GMT+1300

> date1 == date2;
outputs: false

> Math.floor(date1.getTime() / 86400000) == Math.floor(date2.getTime() / 86400000);
outputs: true

참고 : 시간 부분이 0으로 설정된 Date 객체를 비교하는 경우 사용할 수는 date1.getTime() == date2.getTime()있지만 최적화 할 가치는 거의 없습니다. 당신이 사용할 수있는 <, >, <=, 또는 >=이러한 연산자를 먼저 호출하여 Date 객체로 변환하기 때문에 날짜를 비교하는 객체를 직접 때 .valueOf()운전자가 비교를 수행하기 전에.


2

게시 된 후이 질문을 상당히 동시에 읽은 후에는 적어도 내 요구에 매우 만족스럽지 않은 다른 솔루션을 게시하기로 결정했습니다.

나는 이와 같은 것을 사용했다 :

var currentDate= new Date().setHours(0,0,0,0);

var startDay = new Date(currentDate - 86400000 * 2);
var finalDay = new Date(currentDate + 86400000 * 2);

그런 식으로 날짜를 나중에 처리하기 위해 원하는 형식으로 사용할 수있었습니다. 그러나 이것은 내 필요에만 해당되었지만 어쨌든 게시하기로 결정했습니다. 아마도 누군가를 도울 것입니다.


1
당신의주의 currentDate가 1970-01-01부터의 밀리 세컨드 수의 변수가 날짜가 아닙니다. 이 setHours()메소드는 호출 된 날짜 오브젝트를 수정하고 이에 상응하는 getTime()값 (1970-01-01 이후의 밀리 초 단위의 날짜 값)을 리턴합니다 .
Timothy Walters

1

userDate으로 4 자리 연도로 구성해야합니다 setFullYear(10, ...) !== setFullYear(2010, ...).


1

총 ms로 산술을 사용할 수 있습니다.

var date = new Date(date1);
date.setHours(0, 0, 0, 0);

var diff = date2.getTime() - date.getTime();
return diff >= 0 && diff < 86400000;

원래 날짜에 대한 업데이트가없고 문자열 분할 및 비교보다 성능이 빠르기 때문에 이것을 좋아합니다.

이 도움을 바랍니다!


1

이 JS는 설정된 날짜 이후 내용이 변경 되지만 w3schools는 동일합니다.

date1 = new Date()
date2 = new Date(2019,5,2) //the date you are comparing

date1.setHours(0,0,0,0)

var stockcnt = document.getElementById('demo').innerHTML;
if (date1 > date2){
document.getElementById('demo').innerHTML="yes"; //change if date is > set date (date2)
}else{
document.getElementById('demo').innerHTML="hello"; //change if date is < set date (date2)
}
<p id="demo">hello</p> <!--What will be changed-->
<!--if you check back in tomorrow, it will say yes instead of hello... or you could change the date... or change > to <-->


1

이것은 나를 위해 작동합니다 :

 export default (chosenDate) => {
  const now = new Date();
  const today = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()));
  const splitChosenDate = chosenDate.split('/');

  today.setHours(0, 0, 0, 0);
  const fromDate = today.getTime();
  const toDate = new Date(splitChosenDate[2], splitChosenDate[1] - 1, splitChosenDate[0]).getTime();

  return toDate < fromDate;
};

수락 된 답변에 시간대 문제가 있으며 다른 시간에는 00:00:00이 아닙니다.


0

나는이 질문에 이미 답변되었으며 이것이 최선의 방법은 아니지만 내 시나리오에서 완벽하게 작동하므로 나 같은 사람에게 도움이 될 것이라고 생각했습니다.

당신이있는 경우 date string

String dateString="2018-01-01T18:19:12.543";

JS의 다른 Date 객체와 날짜 부분을 비교하려고합니다.

var anotherDate=new Date(); //some date

그런 다음에이 를 사용하여 객체convertstringDatenew Date("2018-01-01T18:19:12.543");

그리고 여기 속임수가 있습니다 :-

var valueDate =new Date(new Date(dateString).toDateString());

            return valueDate.valueOf() == anotherDate.valueOf(); //here is the final result

내가 사용한 toDateString()Date object날짜 문자열 만 반환 JS,의.

참고 : .valueOf()날짜를 비교하는 동안 함수 를 사용하는 것을 잊지 마십시오 .

자세한 정보 .valeOf()는 여기 참조

행복한 코딩.


0

도움이 될 것입니다. 나는 이것을 이렇게 얻었습니다.

var currentDate = new Date(new Date().getFullYear(), new Date().getMonth() , new Date().getDate())

0

와 비교하면 setHours()해결책이 될 것입니다. 견본:

var d1 = new Date();
var d2 = new Date("2019-2-23");
if(d1.setHours(0,0,0,0) == d2.setHours(0,0,0,0)){
    console.log(true)
}else{
    console.log(false)
}

0
var fromdate = new Date(MM/DD/YYYY);
var todate = new Date(MM/DD/YYYY);
if (fromdate > todate){
    console.log('False');
}else{
    console.log('True');
}

날짜 형식 이 다른 경우 moment.js 라이브러리를 사용 하여 날짜 형식을 변환 한 다음 위의 코드를 사용하여 두 날짜를 비교하십시오

예 :

날짜가 "DD / MM / YYYY"이고 날짜를 "MM / DD / YYYY"로 변환하려면 아래 코드 예를 참조하십시오.

var newfromdate = new Date(moment(fromdate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newfromdate);
var newtodate = new Date(moment(todate, "DD/MM/YYYY").format("MM/DD/YYYY"));
console.log(newtodate);

0

fp_incr (0)을 사용할 수 있습니다. 시간대 부분을 자정으로 설정하고 날짜 객체를 반환합니다.

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