簡體   English   中英

Moment.js:日期之間的日期

[英]Moment.js: Date between dates

我試圖用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! :("); }

我確信必須有更好的方法來做到這一點。 有任何想法嗎?

版本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函數具有第四個可選參數, 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作為忽略單位的第三個參數,在這種情況下,毫秒是默認粒度。

訪問官方文檔

您可以使用其中一個時刻插件 - > 時刻范圍來處理日期范圍:

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

您可以使用

moment().isSameOrBefore(Moment|String|Number|Date|Array);
moment().isSameOrAfter(Moment|String|Number|Date|Array);

要么

moment().isBetween(moment-like, moment-like);

見這里: http//momentjs.com/docs/#/query/

我確實相信

if (startDate <= date && date <= endDate) {
  alert("Yay");
} else {
  alert("Nay! :("); 
}

也工作......

大家好消息,有一個isBetween函數! 更新你的圖書館;)

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

請使用moment.isBetween函數(包含性)的第4個參數。 例:

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

var testDate = moment("15/02/2013", "DD/MM/YYYY");

testDate.isBetween(startDate, endDate, 'days', true); // will return true
testDate.isBetween(startDate, endDate, 'days', false); // will return false
if (date.isBefore(endDate) 
 && date.isAfter(startDate) 
 || (date.isSame(startDate) || date.isSame(endDate))

在邏輯上是相同的

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

這可以為您節省幾行代碼和(在某些情況下)方法調用。

如果您只想這樣做一次或兩次,可能比拉入整個插件更容易。

作為時刻js的Per文檔,

有一個由Rob Dawson編寫的精確范圍插件,可用於顯示日期/時間范圍的精確,人類可讀的表示,網址: 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM