Moment.js:date之间的date

如果给定date在两个date之间,我试图用Moment.js检测。 从版本2.0.0开始,Tim添加了isBefore()isAfter()以进行date比较。

由于没有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"); 

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");

如果(date.isBefore(endDate)
&& date.isAfter(startDate)
|| (date.isSame(startDate)|| date.isSame(endDate))
){
警报( “耶!”);
} else {
alert(“N!!:(”);
}

我确信有一个更好的方法来做到这一点。 有任何想法吗?

您可以使用其中一个时刻插件 – > 时间范围来处理date范围:

 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 

版本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作为第三个参数来忽略单位,在这种情况下毫秒是默认粒度。

访问官方文档

我确实相信

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

作品也是…

大家好消息,有一个isBetween函数! 更新你的图书馆;)

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

您可以使用

 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 (date.isBefore(endDate) && date.isAfter(startDate) || (date.isSame(startDate) || date.isSame(endDate)) 

在逻辑上是一样的

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

这为您节省了几行代码和(在某些情况下)方法调用。

如果你只想这样做一次或两次,可能比拖入整个插件容易。

请使用moment.isBet函数的第四个参数(包含性)。 例:

 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 

按照js的文档,

有Rob Dawson编写的Precise Range插件,可以用来显示date/时间范围的精确的,人类可读的表示,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