[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>