Moment 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 года) в качестве даты в прошлом.
Любая идея, что я делаю неправильно?
Ответы
Ответ 1
После прочтения документации: 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)
Ответ 2
Вы можете использовать функцию isSame
:
var iscurrentDate = startTime.isSame(new Date(), "day");
if(iscurrentDate) {
}
Ответ 3
// Returns true if it is today or false if it not
moment(SpecialToDate).isSame(moment(), 'day');
Ответ 4
Вы можете использовать функцию запроса 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
http://momentjs.com/docs/#/query/is-after/
Ответ 5
Поскольку никто, кажется, еще не упомянул об этом, самый простой способ проверить, находится ли объект даты Момента в прошлом:
momentObj.isBefore()
Или в будущем:
momentObj.isAfter()
Просто оставьте аргументы пустыми - это будет по умолчанию сейчас.
Там также isSameOrAfter
и isSameOrBefore
.
NB это факторы во времени. Если вам небезразличен только день, посмотрите ответ Дипенду.
Ответ 6
invert isBefore метод момента, чтобы проверить, соответствует ли дата такой же, как сегодня или в будущем, как это:
!moment(yourDate).isBefore(moment(), "day");
Ответ 7
Чтобы проверить, действительно ли это сегодня:
Если мы сравним две даты, которые также содержат информацию о времени 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
Ответ 8
Если вам нужно только узнать, какой из них больше, вы также можете сравнить их напрямую:
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');
}
Надеюсь, это поможет!
Ответ 9
если firstDate совпадает или после (в будущем) secondDate return 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;
}
Ответ 10
На всякий случай, если это кому-то еще нужно, просто сделайте это:
const isToday = moment(0, "HH").diff(date, "days") == 0;
или если вы хотите функцию:
isToday = date => moment(0,"HH").diff(date, "days") == 0;
Где дата - это дата, которую вы хотите проверить.
объяснение
moment(0, "HH")
возвращает сегодняшний день в полночь.
date1.diff(date2, "days")
возвращает количество дней между date1 и date2.
Обновить
С тех пор я нашел функцию isSame, которая, на мой взгляд, является правильной функцией для определения даты на сегодняшний день:
moment().isSame('2010-02-01', 'day'); // Return true if we are the 2010-02-01
Ответ 11
Используйте простейший для проверки на будущее.
if(moment().diff(yourDate) >= 0)
alert ("Past or current date");
else
alert("It is a future date");
Ответ 12
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)
Ответ 13
Выберите вчера, чтобы проверить прошлые дни или нет с помощью 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()">
Ответ 14
Я хотел его для чего-то другого, но в итоге нашел трюк, который вы можете попробовать
somedate.calendar(compareDate, { sameDay: '[Today]'})=='Today'
var d = moment();
var today = moment();
console.log("Usign today 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>
Ответ 15
Если мы хотим разницу без времени, вы можете получить дату разную (только дату без времени), как показано ниже, используя формат момента.
Как, я столкнулся с проблемой с разницей во время выполнения;
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 past day
else
//it current or future
Пожалуйста, не стесняйтесь комментировать, если есть что улучшить.
Спасибо,