140

特定の日付が2つの日付の間にあるかどうかをMoment.jsで検出しようとしています。バージョン 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! :("); }

これを行うためのより良い方法があるはずだと確信しています。何か案は?

4

8 に答える 8

330

バージョン 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

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

公式ドキュメントにアクセス

于 2015-04-07T15:45:00.910 に答える
97

モーメントプラグイン->モーメント範囲のいずれかを使用して、日付範囲を処理できます。

var startDate = new Date(2013, 1, 12)
  , endDate   = new Date(2013, 1, 15)
  , date  = new Date(2013, 2, 15)
  , range = moment().range(startDate, endDate);

range.contains(date); // false
于 2013-02-15T15:56:15.697 に答える
15

皆さん朗報です、isBetween機能があります!ライブラリを更新してください ;)

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

于 2015-03-17T19:10:25.207 に答える
7
if (date.isBefore(endDate) 
 && date.isAfter(startDate) 
 || (date.isSame(startDate) || date.isSame(endDate))

論理的には

if (!(date.isBefore(startDate) || date.isAfter(endDate)))

これにより、数行のコードと (場合によっては) メソッド呼び出しを節約できます。

これを 1 回か 2 回だけ実行したい場合は、プラグイン全体を取り込むよりも簡単かもしれません。

于 2015-03-05T10:26:23.330 に答える
1

モーメントjsのドキュメントごとに、

Rob Dawson によって作成された Precise Range プラグインがあり、これを使用して、日付/時刻範囲の正確で人間が判読できる表現を表示できます。URL : http://codebox.org.uk/pages/moment-date-range-plugin

moment("2014-01-01 12:00:00").preciseDiff("2015-03-04 16:05:06");
// 1 year 2 months 3 days 4 hours 5 minutes 6 seconds

moment.preciseDiff("2014-01-01 12:00:00", "2014-04-20 12:00:00");
// 3 months 19 days
于 2014-11-12T12:01:59.223 に答える