web-dev-qa-db-ja.com

Moment JS - 日付が今日か未来かをチェック

与えられた日付が今日か未来かを確認するために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日)を過去の日付として評価しています。

私が悪いことをしているという考えはありますか?

182
Latheesan

ドキュメントを読んだ後: http://momentjs.com/docs/#/displaying/difference/ 、マイナスのようにdiff関数を考慮する必要があります。オペレーター。

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

そのため、あなたはreverseあなたの状態にしなければなりません。

すべて問題ないことを確認したい場合は、関数に追加のパラメータを追加できます。

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

isSame関数を使うことができます。

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

}
254
Grey Wolf
// Returns true if it is today or false if it's not
moment(SpecialToDate).isSame(moment(), 'day');
122
Akis

MomentjsのisAfter()クエリ関数を使うことができます。

ちょっと待ってください。

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

粒度をミリ秒以外の単位に制限したい場合は、2番目のパラメーターとして単位を渡します。

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/

70
dbasch

まだ誰も言及していないようなので、Moment日付オブジェクトが過去のものであるかどうかを調べる最も簡単な方法は、次のとおりです。

momentObj.isBefore()

または将来的には:

momentObj.isAfter()

引数を空白のままにしてください - これがデフォルトになります。

isSameOrAfterisSameOrBefore もあります。

N.B.これは時間の要因です。あなたが一日だけ気にするなら、 Dipenduの答え を見てください。

55
mpen

日付が今日と同じか未来かをチェックするモーメントの前のメソッド

!moment(yourDate).isBefore(moment(), "day");
9
Dipendu Paul

今日かどうかを確認するには

時間情報isSameも含む2つの日付を比較すると、明らかに失敗します。 2つの日付が新しい日にまたがる場合、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 
8
Emaborsa

どちらが大きいかを知るだけでよい場合は、それらを直接比較することもできます。

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');
}

お役に立てれば!

6
jsidera

万が一他の人がこれを必要としている場合は、これを実行してください。

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

またはあなたが機能が欲しいなら:

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

ここで、dateは確認したい日付です。

説明

moment(0, "HH")は、今日の深夜0時を返します。

date1.diff(date2, "days")は、date1とdate2の間の日数を返します。

更新

私はそれ以来、 isSame 関数を見つけました。日付が今日の場合はout:

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

firstDateが同じかそれ以降(未来)ならsecondDateがtrueを返し、そうでなければfalseを返します。戸田は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;
  }
4
ethemsulan
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)
2
Tanzeel

将来の日付をチェックするために最も簡単なものを使う

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

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
Mo.

私は他の何かのためにそれを望んでいたが結局あなたが試すことができるトリックを見つけた

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
abhirathore2006

時間なしの違いが欲しい場合は、以下のように、時のフォーマットを使用して、日付を異なる時間(日付なしの日付のみ)にすることができます。

として、私はやっている間の違いで問題に直面していました。

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

改善点がある場合は、遠慮なくコメントしてください。

ありがとう、

0
Rajan Maharjan