한 날짜가 두 날짜 사이에 있는지 확인


82

형식 date의 문자열 dd/mm/yyyy이 같은 형식을 가진 다른 두 날짜 사이 에 있는지 확인해야 합니다.dd/mm/yyyy

나는 이것을 시도했지만 작동하지 않습니다.

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var from = Date.parse(dateFrom);
var to   = Date.parse(dateTo);
var check = Date.parse(dateCheck );

if((check <= to && check >= from))      
    alert("date contained");

디버거를 사용하고 확인했으며 tofrom변수에 isNaN값이 있습니다. 당신이 나를 도울 수?


Daniel, 정확한 답변을 업데이트해야합니다. 더 투표에 대답은 달 동안 날짜를 확인하지 않습니다

답변:


106

Date.parse형식을 지원 mm/dd/yyyy하지 dd/mm/yyyy. 후자의 경우 moment.js와 같은 라이브러리를 사용하거나 아래와 같이 작업을 수행하십시오.

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "02/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);

console.log(check > from && check < to)

2
+1은 날짜 문자열을 올바르게 구문 분석하고 구현 종속 구문 분석기에 맡기지 않습니다.
RobG 2013-04-18

2
db 규칙을 고려하십시오. 첫 번째 날짜는 포함되어야합니다. 예check >= from && check < to
Onur Yıldırım 2016 년

@Diode check : 2018 년 2 월 23 일부터 2018 년 11 월 20 일부터 2018 년 12 월 31 일까지 true를 반환합니다.
chudasamachirag

3
@chudasamachirag : 질문은 dd / mm / yyyy 형식을 구문 분석하는 것이 었습니다. 이 날짜는 mm / dd / yyyy 형식입니다
Diode

49

날짜를 직접 비교하는 대신 날짜의 getTime () 값을 비교하십시오. getTime () 함수는 1970 년 1 월 1 일 이후의 밀리 초 수를 정수로 반환합니다. 하나의 정수가 다른 두 정수 사이에 속하는지 확인하는 것은 간단해야합니다.

같은 것

if((check.getTime() <= to.getTime() && check.getTime() >= from.getTime()))      alert("date contained");

NaN어느 쪽도 없습니다 GetTime아니고 getTime방법을?
Bergi

2
날짜 형식이-02/05/2013과 같을 때 완벽하게 작동하지만 날짜가-2019-09-12T13 : 02 : 14.291Z와 같은 iso 형식 (날짜 + 시간)이면 날짜를 비교하기 전에 setHours 메서드 를 사용하십시오. - let compareDate = new Date('checkDate').setHours(0, 0, 0, 0); let startDate = new Date('startDate').setHours(0, 0, 0, 0); let endDate = new Date('endDate').setHours(0, 0, 0, 0); console.log(compareDate <= endDate && compareDate >= startDate); 희망 그것은 : 다른 사람을 도움이 될 것입니다
사얀 Samanta에게

17

아래 내용을 시도해보십시오. 그것은 당신을 도울 것입니다 ...

바이올린 : http://jsfiddle.net/RYh7U/146/

스크립트 :

if(dateCheck("02/05/2013","02/09/2013","02/07/2013"))
    alert("Availed");
else
    alert("Not Availed");

function dateCheck(from,to,check) {

    var fDate,lDate,cDate;
    fDate = Date.parse(from);
    lDate = Date.parse(to);
    cDate = Date.parse(check);

    if((cDate <= lDate && cDate >= fDate)) {
        return true;
    }
    return false;
}

2
@Bergi : 날짜 인 경우 NAN이 함수는 return False(가) 그래서 Date you check Or Pass이다 Not Availed또는 In Valid이 내 그의 코드 사이에 지옥의 차이
Pandian

그러나 OP의 if 조건도 그렇게합니까? 그리고 질문은 처음에있는 날짜 대한 것이 었 NaN습니다 (모든 브라우저에있는 것은 아닙니다)
Bergi

now아래 7:00am에 해당 되는지 확인하려면 어떻게해야합니까?9:00pm
Si8

dateCheck ( "20/01/2015", "22/01/2015", "21/02/2015")이 케이스가 작동하지 않음
Bhavin Rana

@BhavinRana이 경우는 dd / mm / yyyy를 사용하기 때문에 작동하지 않습니다. 정확한 것은 mm / dd / yyyy입니다
Mike

9

50 표를받은 답변은 몇 달 동안 만 날짜를 확인하지 않습니다. 정답이 아닙니다. 아래 코드가 작동합니다.

var dateFrom = "01/08/2017";
var dateTo = "01/10/2017";
var dateCheck = "05/09/2017";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1);  // -1 because months are from 0 to 11
var to   = new Date(d2);
var check = new Date(c);

alert(check > from && check < to);

이것은 다른 답변에 게시 된 코드이며 날짜를 변경했으며 작동하지 않는다는 것을 알았습니다.

var dateFrom = "02/05/2013";
var dateTo = "02/09/2013";
var dateCheck = "07/07/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");
var c = dateCheck.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]);
var check = new Date(c[2], parseInt(c[1])-1, c[0]);


alert(check > from && check < to);

2

주어진 날짜가 두 날짜 사이인지 아닌지 확인하는 사용자 지정 기능을 만들었습니다.

var getvalidDate = function(d){ return new Date(d) }

function validateDateBetweenTwoDates(fromDate,toDate,givenDate){
    return getvalidDate(givenDate) <= getvalidDate(toDate) && getvalidDate(givenDate) >= getvalidDate(fromDate);
}

2

수락 된 답변을 기반으로이 작업을 단순화하는 방법입니다.

제 경우에는 현재 날짜 (오늘)가 다른 두 날짜의 범위를 차지하는지 확인해야하므로 하드 코딩 된 값 대신 newDate ()를 사용했지만 하드 코딩 된 날짜를 사용할 수있는 방법을 알 수 있습니다.


var currentDate = new Date().toJSON().slice(0,10);
var from = new Date('2020/01/01');
var to   = new Date('2020/01/31');
var check = new Date(currentDate);

console.log(check > from && check < to);


0

이 시도:

HTML

<div id="eventCheck"></div>

자바 스크립트

// ----------------------------------------------------//
// Todays date
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();

// Add Zero if it number is between 0-9
if(dd<10) {
    dd = '0'+dd;
}
if(mm<10) {
    mm = '0'+mm;
}

var today = yyyy + '' + mm + '' + dd ;


// ----------------------------------------------------//
// Day of event
var endDay = 15; // day 15
var endMonth = 01; // month 01 (January)
var endYear = 2017; // year 2017

// Add Zero if it number is between 0-9
if(endDay<10) {
    endDay = '0'+endDay;
} 
if(endMonth<10) {
    endMonth = '0'+endMonth;
}

// eventDay - date of the event
var eventDay = endYear + '/' + endMonth + '/' + endDay;
// ----------------------------------------------------//



// ----------------------------------------------------//
// check if eventDay has been or not
if ( eventDay < today ) {
    document.getElementById('eventCheck').innerHTML += 'Date has passed (event is over)';  // true
} else {
    document.getElementById('eventCheck').innerHTML += 'Date has not passed (upcoming event)'; // false
}

바이올린 : https://jsfiddle.net/zm75cq2a/


0

다음은 typescript로 작성된 Date Prototype 메서드입니다.

Date.prototype.isBetween = isBetween;
interface Date { isBetween: typeof isBetween }
function isBetween(minDate: Date, maxDate: Date): boolean {
  if (!this.getTime) throw new Error('isBetween() was called on a non Date object');
  return !minDate ? true : this.getTime() >= minDate.getTime()
    && !maxDate ? true : this.getTime() <= maxDate.getTime();
};

0

첫 번째 대답 인 @Diode와 똑같은 일을했지만 다양한 날짜로 조건을 만들었습니다.이 예제가 누군가에게 유용하기를 바랍니다.

예 (날짜 배열을 사용한 예제와 동일한 코드)

var dateFrom = "02/06/2013";
var dateTo = "02/09/2013";

var d1 = dateFrom.split("/");
var d2 = dateTo.split("/");

var from = new Date(d1[2], parseInt(d1[1])-1, d1[0]);  // -1 because months are from 0 to 11
var to   = new Date(d2[2], parseInt(d2[1])-1, d2[0]); 



var dates= ["02/06/2013", "02/07/2013", "02/08/2013", "02/09/2013", "02/07/2013", "02/10/2013", "02/011/2013"];

dates.forEach(element => {
   let parts = element.split("/");
   let date= new Date(parts[2], parseInt(parts[1]) - 1, parts[0]);
        if (date >= from && date < to) {
           console.log('dates in range', date);
        }
})


0

예를 들어 날짜가 이렇게 다가오고 있고 날짜 기능을 위해 momentjs를 설치해야한다고 가정합니다.

let cmpDate = Thu Aug 27 2020 00:00:00 GMT+0530 (India Standard Time)

    let format = "MM/DD/YYYY";
    let startDate: any = moment().format(format);
    let endDate: any = moment().add(30, "days").format(format);
    let compareDate: any = moment(cmpDate).format(format);
    var startDate1 = startDate.split("/");
    var startDate2 = endDate.split("/");
    var compareDate1 = compareDate.split("/");

    var fromDate = new Date(startDate1[2], parseInt(startDate1[1]) - 1, startDate1[0]);
    var toDate = new Date(startDate2[2], parseInt(startDate2[1]) - 1, startDate2[0]);
    var checkDate = new Date(compareDate1[2], parseInt(compareDate1[1]) - 1, compareDate1[0]);

    if (checkDate > fromDate && checkDate < toDate) {
      ... condition works between current date to next 30 days
    }

-1

이 시도

var gdate='01-05-2014';
        date =Date.parse(gdate.split('-')[1]+'-'+gdate.split('-')[0]+'-'+gdate.split('-')[2]);
        if(parseInt(date) < parseInt(Date.now()))
        {
            alert('small');
        }else{
            alert('big');
        }

깡깡이

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