Moment.js: 日付間の日付 質問する

Moment.js: 日付間の日付 質問する

Moment.js を使用して、特定の日付が 2 つの日付の間にあるかどうかを検出しようとしています。バージョン 2.0.0 以降、Tim は日付の比較のためにisBefore()と を追加しましたisAfter()

方法がないのでisBetween()、これが機能すると思いました:

var date = moment("15/02/2013", "DD/MM/YYYY");
var startDate = moment("12/01/2013", "DD/MM/YYYY");
var endDate = moment("15/01/2013", "DD/MM/YYYY");

if (date.isBefore(endDate) && date.isAfter(startDate) || (date.isSame(startDate) || date.isSame(endDate)) ) { alert("Yay!"); } else { alert("Nay! :("); }

もっと良い方法があるはずだと確信しています。何かアイデアはありますか?

ベストアンサー1

バージョン 2.9+関数はありますisBetweenが、排他的です:

var compareDate = moment("15/02/2013", "DD/MM/YYYY");
var startDate   = moment("12/01/2013", "DD/MM/YYYY");
var endDate     = moment("15/01/2013", "DD/MM/YYYY");

// omitting the optional third parameter, 'units'
compareDate.isBetween(startDate, endDate); //false in this case

包括的な回避策があります...
x.isBetween(a, b) || x.isSame(a) || x.isSame(b)

...これは論理的に次の式と等価である。
!(x.isBefore(a) || x.isAfter(b))


バージョン 2.13このisBetween関数には 4 番目のオプション パラメータがありますinclusivity

次のように使用します:

target.isBetween(start, finish, 'days', '()') // default exclusive
target.isBetween(start, finish, 'days', '(]') // right inclusive
target.isBetween(start, finish, 'days', '[)') // left inclusive
target.isBetween(start, finish, 'days', '[]') // all inclusive

検討すべきその他のユニット:years, months, days, hours, minutes, seconds, milliseconds

注: 単位はオプションです。null単位を無視するには 3 番目の引数として使用します。その場合、デフォルトの粒度はミリ秒になります。

公式ドキュメントをご覧ください

おすすめ記事