[javascript] 순간 js 날짜 시간 비교

날짜 시간 형식을 지정하기 위해 moment.js를 사용하고 있습니다. 여기에는 두 개의 날짜 값이 있으며 한 날짜가 다른 날짜보다 클 때 특정 기능을 달성하려고합니다. 나는 대부분의 문서를 읽었지만 이것을 달성하는 기능을 찾지 못했습니다. 나는 그것이있을 것이라는 것을 안다.

이것은 내 코드입니다.

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date 

var now = new Date(),
    dnow = moment(now).tz('UTC'),
    snow = dnow.minute() % 15,
    diffnow = 15 - snow,
    tonow = moment(dnow).add('minute', diffnow),
    ahead30now = moment(tonow).add('minute', 30);

if (d > ahead30now) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}

편집하다

var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
    console.log('is after true');
} else {
    console.log('is after is false');
}

여기서 두 날짜를 비교 2014-03-24T01:15:000 > 2014-03-24T01:14:000하고 있습니다. 즉 , 첫 번째 날짜가 두 번째 날짜 보다 클 것으로 예상하지만 항상 else 조건으로 이동합니다. 왜 그런지 모르겠어요?



답변

난 당신이 찾고있는 생각 조회 기능을 , isBefore, isSame,와 isAfter.

그러나 당신이 무엇을 시도하고 있는지 정확하게 말하기는 약간 어렵습니다. 아마도 입력 시간과 현재 시간의 차이를 얻고 싶습니까? 그렇다면, 고려 차이 기능을 , diff. 예를 들면 다음과 같습니다.

moment().diff(date_time, 'minutes')

몇 가지 다른 것들 :

  • 첫 번째 줄에 오류가 있습니다.

    var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'

    작동하지 않습니다. 나는 당신이 의미한다고 생각합니다 :

    var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';

    물론 다음과 같이 할 수도 있습니다.

    var date_time = '2013-03-24T10:15:20:12Z';
  • 사용중인 : .tz('UTC')잘못되었습니다. moment-timezone에.tz 속합니다 . 와 같은 다른 시간대로 작업하지 않는 한이를 사용할 필요가 없습니다 .America/Los_Angeles

    값을 UTC로 구문 분석하려면 다음을 사용하십시오.

    moment.utc(theStringToParse)

    또는 로컬 값을 구문 분석 하여 UTC 로 변환하려면 다음을 사용하십시오.

    moment(theStringToParse).utc()

    아니면 전혀 필요하지 않을 수도 있습니다. 입력 값이 UTC로되어 있다고해서 함수 전체에서 UTC로 작업해야한다는 의미는 아닙니다.

  • 에 의해 “지금”인스턴스를 얻는 것 같습니다 moment(new Date()). 대신을 사용할 수 있습니다 moment().

업데이트

편집 내용에 따라 다음과 같이하면됩니다.

var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');

또는 필드의 형식이 올바른지 확인하려면 다음을 수행하십시오.

var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD  HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');


답변

직접 비교할 수 있어야합니다.

var date = moment("2013-03-24")
var now = moment();

if (now > date) {
   // date is past
} else {
   // date is future
}


답변

JSfiddle : http://jsfiddle.net/guhokemk/1/

 function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));

dateTimeA가 dateTimeB보다 큰 경우이 메소드는 1을 리턴합니다.

dateTimeA가 dateTimeB와 같은 경우이 메소드는 0을 리턴합니다.

dateTimeA가 dateTimeB보다 작은 경우이 메소드는 -1을 리턴합니다.


답변

당신의 날짜가 올바른에 있다는 것이 중요하다 ISO 형식 의 임의 사용하는 경우 momentjs 쿼리를 : isBefore, isAfter, isSameOrBefore, isSameOrAfter,isBetween

따라서 2014-03-24T01 : 14 : 000 대신 날짜 시간은 다음 중 하나 여야합니다.

2014-03-24T01 : 14 : 00 또는 2014-03-24T01 : 14 : 00.000Z

그렇지 않으면 다음과 같은 지원 중단 경고가 표시 될 수 있으며 조건은 false로 평가됩니다.

지원 중단 경고 : 제공된 값이 인식 된 RFC2822 또는 ISO 형식이 아닙니다. 모멘트 구성은 js Date ()로 돌아가며 모든 브라우저와 버전에서 신뢰할 수있는 것은 아닙니다. 비 RFC2822 / ISO 날짜 형식은 권장되지 않으며 향후 주요 릴리스에서 제거 될 예정입니다. 자세한 내용은 http://momentjs.com/guides/#/warnings/js-date/ 를 참조하십시오
.

// https://momentjs.com/docs/#/query/

const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));

const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));

const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));

console.log(`Date is After: ${dateIsAfter}`);
console.log(`Date is Same: ${dateIsSame}`);
console.log(`Date is Before: ${dateIsBefore}`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>


답변

이와 같이 날짜를 순간으로 전달하면 결과가 비교됩니다. 포맷을 원하지 않으면 제거하십시오.

moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")


답변

moment(d).isAfter(ahead30now); // true

http://momentjs.com/docs/#/query/is-after/

if (moment(d).isAfter(ahead30now)) {
    // allow input time
    console.log('UTC TIME DB', d.format());
} else {

}


답변

날짜-시간 비교 valueOf의 경우 날짜-시간의 밀리 초를 제공하는 순간의 기능을 사용할 수 있습니다 .

let date1 = moment('01-02-2020','DD-MM-YYYY').valueOf()
let date2 = moment('11-11-2012','DD-MM-YYYY').valueOf()

//     alert((date1 > date2 ? 'date1' : 'date2') + " is greater..."  )

if (date1 > date2) {
   alert("date1 is greater..." )
} else {
   alert("date2 is greater..." )
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>