Момент JS-проверьте, является ли дата сегодня или в будущем
Я пытаюсь использовать momentjs чтобы проверить, является ли данная дата сегодня или в будущем.
это то, что у меня есть до сих пор:
<script type="text/javascript" src="http://momentjs.com/downloads/moment.min.js"></script>
<script type="text/javascript">
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY
var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY");
if (moment().diff(SpecialTo) > 0) {
alert('date is today or in future');
} else {
alert('date is in the past');
}
</script>
код оценивает мою дату (31 января 2014 года) как дату в прошлом.
есть идеи, что я делаю неправильно?
14 ответов:
после прочтения документации:http://momentjs.com/docs/#/displaying/difference/, Вы должны рассмотреть
diffфункция как минус оператор.// today < future (31/01/2014) today.diff(future) // today - future < 0 future.diff(today) // future - today > 0поэтому вы должны реверс ваше состояние.
Если вы хотите проверить, что все нормально, вы можете добавить дополнительный параметр в функцию:
moment().diff(SpecialTo, 'days') // -8 (days)
использовать функцию isSame
var iscurrentDate = startTime.isSame(new Date(), "day"); if(iscurrentDate) { }
можно использовать
isAfter()функция запроса momentjs:проверьте, если момент после очередной момент.
moment('2010-10-20').isAfter('2010-10-19'); // trueЕсли вы хотите ограничить детализацию до единицы, отличной от миллисекунд, передайте единицы в качестве второго параметра.
moment('2010-10-20').isAfter('2010-01-01', 'year'); // false moment('2010-10-20').isAfter('2009-12-31', 'year'); // true
поскольку никто, кажется, еще не упомянул об этом, самый простой способ проверить, находится ли объект даты момента в прошлом:
momentObj.isBefore()или в будущем:
momentObj.isAfter()просто оставьте args пустым - это будет по умолчанию сейчас.
там же
isSameOrAfterиisSameOrBefore.N. B. Это факторы во времени. Если вы заботитесь только о дне, смотрите Dipendu это.
чтобы проверить, если он сегодня:
если мы сравниваем две даты, которые содержат также информацию о времени
isSameбудет явно не получится.diffпотерпит неудачу в случае, если две даты охватывают Новый День:var date1 = moment("01.01.2016 23:59:00", "DD.MM.YYYY HH.mm.ss"); var date2 = moment("02.01.2016 00:01:00", "DD.MM.YYYY HH.mm.ss"); var diff = date2.diff(date1); // 2secondsЯ думаю, что лучший способ, даже если он не быстрый и короткий, заключается в следующем:
var isSame = date1.date() == date2.date() && date1.month() == date2.month() && date1.year() == date2.year()чтобы проверить, если это в будущем:
как предложили также другие пользователи,
diffметод работает.var isFuture = now.diff(anotherDate) < 0
Если вам нужно только знать, какой из них больше, вы также можете сравнить их напрямую:
var SpecialToDate = '31/01/2014'; // DD/MM/YYYY var SpecialTo = moment(SpecialToDate, "DD/MM/YYYY"); if (moment() > SpecialTo) { alert('date is today or in future'); } else { alert('date is in the past'); }надеюсь, что это помогает!
инвертировать isBefore метод момента, чтобы проверить, если дата такая же, как сегодня или в будущем, как это:
!moment(yourDate).isBefore(moment(), "day");
Если firstDate такой же или после(будущего) secondDate возвращает true else возвращает false. Toda is firstDate = new Date ();
static isFirstDateSameOrAfterSecondDate(firstDate: Date, secondDate: Date): boolean { var date1 = moment(firstDate); var date2 = moment(secondDate); if(date1 && date2){ return date1.isSameOrBefore(date2,'day'); } return false; }есть isSame, isBefore и isAfter за день сравнить момент пример;
static isFirstDateSameSecondDate(firstDate: Date, secondDate: Date): boolean { var date1 = moment(firstDate); var date2 = moment(secondDate); if (date1 && date2) { return date1.isSame(date2,'day'); } return false; } static isFirstDateAfterSecondDate(firstDate: Date, secondDate: Date): boolean { var date1 = moment(firstDate); var date2 = moment(secondDate); if(date1 && date2){ return date1.isAfter(date2,'day'); } return false; } static isFirstDateBeforeSecondDate(firstDate: Date, secondDate: Date): boolean { var date1 = moment(firstDate); var date2 = moment(secondDate); if(date1 && date2){ return date1.isBefore(date2,'day'); } return false; }
используйте самый простой, чтобы проверить будущую дату
if(moment().diff(yourDate) >= 0) alert ("Past or current date"); else alert("It is a future date");
function isTodayOrFuture(date){ date = stripTime(date); return date.diff(stripTime(moment.now())) >= 0; } function stripTime(date){ date = moment(date); date.hours(0); date.minutes(0); date.seconds(0); date.milliseconds(0); return date; }а затем просто использовать его строку это:
isTodayOrFuture(YOUR_TEST_DATE_HERE)
выберите вчера, чтобы проверить последние дни или нет с помощью
moment().subtract(1, "day");Ссылка: -http://momentjs.com/docs/#/manipulating/subtract/
function myFunction() { var yesterday = moment().subtract(1, "day").format("YYYY-MM-DD"); var SpecialToDate = document.getElementById("theDate").value; if (moment(SpecialToDate, "YYYY-MM-DD", true).isAfter(yesterday)) { alert("date is today or in future"); console.log("date is today or in future"); } else { alert("date is in the past"); console.log("date is in the past"); } }<script src="http://momentjs.com/downloads/moment.js"></script> <input type="date" id="theDate" onchange="myFunction()">
Я хотел его для чего-то еще, но в конце концов нашел трюк, который вы можете попробовать
somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'var d = moment(); var today = moment(); console.log("Usign today's date, is Date is Today? ",d.calendar(today, { sameDay: '[Today]'})=='Today'); var someRondomDate = moment("2012/07/13","YYYY/MM/DD"); console.log("Usign Some Random Date, is Today ?",someRondomDate.calendar(today, { sameDay: '[Today]'})=='Today'); var anotherRandomDate = moment("2012/07/13","YYYY/MM/DD"); console.log("Two Random Date are same date ? ",someRondomDate.calendar(anotherRandomDate, { sameDay: '[Today]'})=='Today');<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
Если мы хотим разницу без времени вы можете получить дату разные (только дата без времени), как показано ниже, используя формат момента.
как, я столкнулся с проблемой с разницей при этом;
moment().diff([YOUR DATE])Итак, придумали следующее;
const dateValidate = moment(moment().format('YYYY-MM-DD')).diff(moment([YOUR SELECTED DATE HERE]).format('YYYY-MM-DD'))IF dateValidate > 0 //it's past day else //it's current or futureпожалуйста, не стесняйтесь комментировать, если есть что улучшить.
спасибо,
Comments