Момент.js: Дата между датами
Я пытаюсь обнаружить с момента.js, если заданная дата находится между двумя датами. Начиная с версии 2.0.0, Тим добавил 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! :(");
}
Я убежден, что должен быть лучший способ сделать это. Есть идеи?
8 ответов:
можно использовать один из плагинов момента ->МиГ-диапазон чтобы иметь дело с диапазоном дат:
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
Я верю, что
if (startDate <= date && date <= endDate) { alert("Yay"); } else { alert("Nay! :("); }тоже работает...
можно использовать
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/
пожалуйста, используйте 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,
есть плагин точного диапазона, написанный Робом Доусоном, может использоваться для отображения точных, удобочитаемых представлений диапазонов дат / времени, 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
Comments