モーメント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 2016年

3
私のために働いていません。未来の日が+1の場合、モーメント()
.diff

2
今日は24時間以内という意味ではありません。isSameは良いソリューションです。
Kasper Ziemianek 16

1
moment().diff(SpecialToDate)ミリ秒単位の差が直接表示されます。'days'必要ありません。これはすべてのシナリオで機能します。SpecialToDateは'2018-10-26 00:00:00'例です。
backslashN

312

次のisSame関数を使用できます。

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

}

これは年月にも一致しますか?
SuperUberDuper 2016年

13
年と月が一致する必要があります。moment( '2010-01-01')。isSame( '2011-01-01'、 'month'); // false、異なる年のモーメント( '2010-01-01')。isSame( '2010-02-01'、 'day'); // false、別の月
Grey Wolf

6
これはOPの質問にも答えません...「今日または将来」とは何startTimeですか?日付オブジェクトにはisSameメソッドがありません...
Sharcoux 2018年

1
@Sharcouxこの質問はmomentjsに関するものなので、明らかにそれはモーメントオブジェクトです。
ネイサン

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

85

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

momentObj.isBefore()

または将来的に:

momentObj.isAfter()

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

isSameOrAfterともありisSameOrBeforeます。

これは時間を考慮してください。その日だけに関心がある場合は、ディペンドゥの回答を参照してください。


1
ドキュメントはこれが未定義の動作であることを説明しているので、これを行うべきではありません:momentjs.com/docs
query

13
@Dancrumbもう一度読んでください。「moment#isBeforeに何も渡されない場合、デフォルトで現在時刻になります。」momentObj私の例では、瞬間日のインスタンスです。ドキュメントは、新しいインスタンス(現在の時間)を作成し、それが過去のものかどうかを1つのステートメントで確認することについて具体的に述べています。まったく無意味なことをするつもりはありませんmoment().isBefore() -なぜが過去(または未来)であるかを確認するのですか?
mpen 2018年

83

isAfter()momentjs のクエリ機能を使用できます。

瞬間が次の瞬間の後にあるかどうかを確認します。

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/


日付文字列を受け取るコンストラクタは非推奨です。
Vahid Amiri 2016

@VahidAmiri ドキュメントはこれについて言及していません。ただし、ISO 8601を使用しない場合は、文字列+形式コンストラクタを使用することをお勧めします。したがって、いくつかの奇妙な日付形式を使用していない限り、文字列のみを使用しても問題ありません。
johndodo 2018

15

次のようにisBeforeメソッドを反転して、日付が今日または将来の日付と同じかどうかを確認します。

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

10

誰かがこれを必要とする場合に備えて、これを実行してください:

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

または関数が必要な場合:

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

ここで、dateは確認する日付です。

説明

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

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

時間情報も含む2つの日付を比較するisSameと、明らかに失敗します。diff2つの日付が新しい日にまたがる場合は失敗します。

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が同じまたはafter(future)の場合、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の1日の比較例があります。

  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 2017年

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

真夜中の値でチェックし、正確な結果を返します。2つの日付間の時差が24時間未満の場合にも機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.