Moment JS-날짜가 오늘인지 또는 미래인지 확인


222

momentjs주어진 날짜가 오늘인지 또는 미래인지 확인 하는 데 사용하려고합니다 .

이것이 내가 지금까지 가진 것입니다.

<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">

var SpecialToDate = '31/01/2014'; // DD/MM/YYYY

var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
    alert('date is today or in future');
} else {
    alert('date is in the past');
}

</script>

이 코드는 내 날짜 (2014 년 1 월 31 일)를 과거 날짜로 평가하고 있습니다.

내가 뭘 잘못하고 있는지 알아?

답변:


197

http://momentjs.com/docs/#/displaying/difference/ 문서를 읽은 후에 diff는 빼기 연산자와 같은 기능 을 고려해야합니다 .

                   // today < future (31/01/2014)
today.diff(future) // today - future < 0
future.diff(today) // future - today > 0

따라서 상태 를 반대로 해야합니다.

모든 것이 올바른지 확인하려면 함수에 추가 매개 변수를 추가 할 수 있습니다.

moment().diff(SpecialTo, 'days') // -8 (days)

75
다른 날인 경우에는 작동하지 않지만 차이는 24 시간 미만입니다.
galki

1
시차가 24 시간 미만인지 여부에 관계없이 작동합니다.
zanderwar

3
나를 위해 작동하지 않습니다. 미래 순간에 day가 +1 인 경우 diff (SpecialTo, 'days')는 -0 (음수 0)을 제공합니다
gavroche

2
오늘이 다음 24 시간을 의미하지는 않습니다. isSame은 좋은 솔루션입니다.
카스퍼 Ziemianek

1
moment().diff(SpecialToDate)밀리 초 단위의 차이를 직접 줄 것입니다. 'days'필요하지 않습니다. 이것은 모든 시나리오에서 작동합니다. SpecialToDate를 예로들 수 있습니다 '2018-10-26 00:00:00'.
백 슬래시 N

312

isSame기능을 사용할 수 있습니다 :

var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate) {

}

이것도 연월도 일치합니까?
SuperUberDuper

13
연도와 월이 일치해야합니다. moment ( '2010-01-01'). isSame ( '2011-01-01', 'month'); // 다른 연도 모멘트 ( '2010-01-01'). isSame ( '2010-02-01', 'day'); // 틀린 달
회색 늑대

6
이것은 OP의 질문에 대답조차하지 않습니다 ... "오늘 또는 미래에", 무엇 startTime입니까? 날짜 개체는 isSame방법 이 없습니다 ...
Sharcoux

1
@Sharcoux이 질문은 momentjs에 관한 것이므로 분명히 그것은 모멘트 객체입니다.
Nathan

157
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');

85

아직 언급 한 사람이 없으므로 Moment 날짜 객체가 과거인지 확인하는 가장 간단한 방법은 다음과 같습니다.

momentObj.isBefore()

또는 미래에 :

momentObj.isAfter()

args를 비워 두십시오. 기본값은 지금입니다.

이이기도 isSameOrAfter하고 isSameOrBefore.

NB 이것은 시간의 요소입니다. 하루 만 걱정한다면 Dipendu의 답변을 참조하십시오 .


1
문서는 이것이 정의되지 않은 행동이라고 설명하므로 이것을해서는 안됩니다 : momentjs.com/docs/#/query/is-before
Dancrumb

13
@Dancrumb 다시 읽어보십시오. "moment # isBefore에 전달 된 것이 없으면 현재 시간으로 기본 설정됩니다." momentObj내 예제에서 잠시 일의 인스턴스입니다. 문서는 구체적으로 새 인스턴스 (현재 시간)를 생성 한 다음 한 문장으로 과거에 있는지 확인합니다. 나는 당신 에게 전혀 무의미한 일 을 제안하지 않습니다. 지금 이 과거 (또는 미래) moment().isBefore()인지 왜 확인 하시겠습니까?
mpen

83

isAfter()momentjs 의 쿼리 기능을 사용할 수 있습니다 .

순간이 다른 순간 이후인지 확인하십시오.

moment('2010-10-20').isAfter('2010-10-19'); // true

단위를 밀리 초가 아닌 다른 단위로 제한하려면 두 번째 매개 변수로 단위를 전달하십시오.

moment('2010-10-20').isAfter('2010-01-01', 'year'); // false

moment('2010-10-20').isAfter('2009-12-31', 'year'); // true

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


날짜 문자열을 사용하는 생성자는 더 이상 사용되지 않습니다.
Vahid Amiri

@VahidAmiri 문서 는 이것을 언급하지 않습니다. 그러나 ISO 8601을 사용하지 않으면 string + format 생성자를 사용하도록 제안 합니다. 따라서 이상한 날짜 형식을 사용하지 않으면 문자열 만 사용하는 것이 좋습니다.
johndodo

15

날짜가 오늘과 같은지 또는 다음과 같은지 여부를 확인하는 순간 이전 방법 :

!moment(yourDate).isBefore(moment(), "day");

10

다른 사람이 이것을 필요로 할 경우에 대비하여 다음을 수행하십시오.

const isToday = moment(0, "HH").diff(date, "days") == 0;

또는 기능을 원하는 경우 :

isToday = date => moment(0,"HH").diff(date, "days") == 0;

여기서 날짜 는 확인하려는 날짜입니다.

설명

moment(0, "HH") 오늘 자정에 반환합니다.

date1.diff(date2, "days") date1과 date2 사이의 일 수를 반환합니다.

최신 정보

그 후 isSame 함수를 찾았습니다 .이 함수는 날짜가 오늘인지 알아내는 데 사용할 올바른 함수라고 생각합니다.

moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01

8

오늘인지 확인하려면 :

시간 정보를 포함하는 두 날짜를 비교 isSame하면 분명히 실패합니다. diff두 날짜가 새로운 날에 걸쳐있는 경우 실패합니다.

var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss");
var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss");
var diff = date2.diff(date1); // 2seconds

빠르고 짧지는 않지만 가장 좋은 방법은 다음과 같습니다.

var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()

미래에 있는지 확인하려면 다음을 수행하십시오 .

다른 사용자들도 제안한 것처럼이 diff방법은 효과가 있습니다.

var isFuture = now.diff(anotherDate) < 0 

7

어느 것이 더 큰지 알아야하는 경우 직접 비교할 수도 있습니다.

var SpecialToDate = '31/01/2014'; // DD/MM/YYYY

var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment() > SpecialTo) {
    alert('date is today or in future');
} else {
    alert('date is in the past');
}

도움이 되었기를 바랍니다!


4

firstDate가 같거나 이후 인 경우 (future) secondDate 는 true를 반환하고 그렇지 않으면 false를 반환합니다 . Toda는 firstDate = new Date ()입니다.

  static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isSameOrBefore(date2,'day');
    }
    return false;
  }

주간 비교 모멘트 예제에는 isSame, isBefore 및 isAfter가 있습니다.

  static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if (date1 && date2) {
      return date1.isSame(date2,'day');
    }
    return false;
  }

  static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isAfter(date2,'day');
    }
    return false;
  }

  static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean {
    var date1 = moment(firstDate);
    var date2 = moment(secondDate);
    if(date1 && date2){
      return date1.isBefore(date2,'day');
    }
    return false;
  }

3

미래의 날짜를 확인하려면 가장 간단한 것을 사용하십시오

if(moment().diff(yourDate) >=  0)
     alert ("Past or current date");
else
     alert("It is a future date");

2
function isTodayOrFuture(date){
  date = stripTime(date);
  return date.diff(stripTime(moment.now())) >= 0;
}

function stripTime(date){
  date = moment(date);
  date.hours(0);
  date.minutes(0);
  date.seconds(0);
  date.milliseconds(0);
  return date;
}

그런 다음이 줄을 사용하십시오 :

isTodayOrFuture(YOUR_TEST_DATE_HERE)

1

어제를 선택하여 과거 일을 확인하거나 moment().subtract(1, "day");

참조 : -http : //momentjs.com/docs/#/manipulating/subtract/

function myFunction() {
  var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD");
  var SpecialToDate = document.getElementById("theDate").value;

  if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) {
    alert("date is today or in future");
    console.log("date is today or in future");
  } else {
    alert("date is in the past");
    console.log("date is in the past");
  }
}
<script src="http://momentjs.com/downloads/moment.js"></script>
<input type="date" id="theDate" onchange="myFunction()">


1

우리가 시간없이 차이를 원한다면 순간의 형식을 사용하여 아래와 같이 날짜가 다른 (시간이없는 날짜 만) 얻을 수 있습니다.

마찬가지로, 나는 그 차이와 관련하여 문제에 직면했다.

moment().diff([YOUR DATE])

그래서 다음을 생각해 냈습니다.

const dateValidate = moment(moment().format('YYYY-MM-DD')).diff(moment([YOUR SELECTED DATE HERE]).format('YYYY-MM-DD'))

IF dateValidate > 0 
   //it's past day
else
   //it's current or future

개선해야 할 점이 있으면 언제든지 의견을 말하십시오.

감사,


3
좋은 답변을 작성하는 방법을 검토하십시오 . 코드 전용 답변은 문제 해결 방법을 설명하지 않기 때문에 권장하지 않습니다. 이것이 무엇을하고이 질문이 이미 가지고있는 많은 답변에서 어떻게 개선되는지 설명 하기 위해 답변을 업데이트해야합니다 .
FluffyKitten

0

나는 다른 것을 원했지만 결국 시도 할 수있는 트릭을 찾았습니다.

somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'

var d = moment();
 var today = moment();
 
 console.log("Usign today's date, is Date is Today? ",d.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
 var someRondomDate = moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, {
    sameDay: '[Today]'})=='Today');
    
  
 var anotherRandomDate =  moment("2012/07/13","YYYY/MM/DD");
 
 console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, {
    sameDay: '[Today]'})=='Today');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>


0

다음을 확인하십시오.

let isContinue = moment().diff('2020-04-04T20:06:11+05:30')/1000

몇 초 만에 돌아옵니다 ..

2 분 조건으로 확인하면

if (isContinue < 120) {
  ..To check otp details or further logic
} else {
   // otp is getting invalid
}

0

가장 간단한 답변은 다음과 같습니다.

const firstDate = moment('2020/10/14'); // the date to be checked
const secondDate = moment('2020/10/15'); // the date to be checked

firstDate.startOf('day').diff(secondDate.startOf('day'), 'days'); // result = -1
secondDate.startOf('day').diff(firstDate.startOf('day'), 'days'); // result = 1

자정 값으로 확인하여 정확한 결과를 반환합니다. 두 날짜 사이의 시간 차이가 24 시간 미만인 경우에도 작동합니다.

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