Moment js сравнение времени
Я использую moment.js для форматирования даты и времени, здесь у меня есть два значения даты, и я хочу получить определенную функцию, когда одна дата больше другой. Я прочитал большинство их документов, но не нашел функции для достижения этой цели. Я знаю, что это будет там.
Это мой код:
var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // first date
var now = new Date(),
dnow = moment(now).tz('UTC'),
snow = dnow.minute() % 15,
diffnow = 15 - snow,
tonow = moment(dnow).add('minute', diffnow),
ahead30now = moment(tonow).add('minute', 30);
if (d > ahead30now) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {
}
редактировать
var date_time = req.body.date + 'T' + req.body.time + req.body.timezone; // 2014-03-24T01:15:000
var utc_input_time = moment(date_time).utc(); // 2014-03-24T01:15:000
console.log('utc converted date_time', moment(date_time).utc().format("YYYY-MM-DDTHH:mm:SSS"));
var isafter = moment(utc_input_time).isAfter(moment('2014-03-24T01:14:000')); // true
if(isafter === true){
console.log('is after true');
} else {
console.log('is after is false');
}
Здесь я сравниваю две даты, т.е. 2014-03-24T01:15:000 > 2014-03-24T01:14:000
, ожидая, что первая больше второй, но она всегда переходит в другое условие. Не знаю почему?
Ответы
Ответ 1
Я считаю, что вы ищете функции запросов, isBefore
, isSame
и isAfter
.
Но немного сложно точно сказать, что вы пытаетесь. Возможно, вы просто хотите получить разницу между временем ввода и текущим временем? Если это так, рассмотрите функцию разницы, diff
. Например:
moment().diff(date_time, 'minutes')
Несколько других вещей:
-
В первой строке есть ошибка:
var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
Это не сработает. Думаю, вы имели в виду:
var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';
Конечно, вы могли бы также:
var date_time = '2013-03-24T10:15:20:12Z';
-
Вы используете: .tz('UTC')
неправильно. .tz
относится к моменту-часовому поясу. Вам не нужно использовать это, если вы не работаете с другими часовыми поясами, например America/Los_Angeles
.
Если вы хотите разобрать значение в формате UTC, используйте:
moment.utc(theStringToParse)
Или, если вы хотите разобрать локальное значение и преобразовать его в UTC, используйте:
moment(theStringToParse).utc()
Или, может быть, вам это совсем не нужно. Просто потому, что входное значение находится в UTC, не означает, что вы должны работать в UTC по всей вашей функции.
-
Кажется, вы получаете экземпляр "сейчас" moment(new Date())
. Вместо этого вы можете использовать moment()
.
Обновление
Основываясь на вашем редактировании, я думаю, вы можете просто сделать это:
var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');
Или, если вы хотите убедиться, что ваши поля утверждены в правильном формате:
var m = moment.utc(req.body.date + ' ' + req.body.time, "YYYY-MM-DD HH:mm:ss");
var isvalid = m.isValid();
var isafter = m.isAfter('2014-03-24T01:14:00Z');
Ответ 2
Вы должны иметь возможность сравнивать их напрямую.
var date = moment("2013-03-24")
var now = moment();
if (now > date) {
// date is past
} else {
// date is future
}
$(document).ready(function() {
$('.compare').click(function(e) {
var date = $('#date').val();
var now = moment();
var then = moment(date);
if (now > then) {
$('.result').text('Date is past');
} else {
$('.result').text('Date is future');
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<input type="text" name="date" id="date" value="2014-12-18" placeholder="yyyy-mm-dd">
<button class="compare">Compare date to current date</button>
<br>
<div class="result"></div>
Ответ 3
Jsfiddle: http://jsfiddle.net/guhokemk/1/
function compare(dateTimeA, dateTimeB) {
var momentA = moment(dateTimeA,"DD/MM/YYYY");
var momentB = moment(dateTimeB,"DD/MM/YYYY");
if (momentA > momentB) return 1;
else if (momentA < momentB) return -1;
else return 0;
}
alert(compare("11/07/2015", "10/07/2015"));
Метод возвращает 1, если dateTimeA больше, чем dateTimeB
Метод возвращает 0, если dateTimeA равно dateTimeB
Метод возвращает -1, если dateTimeA меньше, чем dateTimeB
Ответ 4
перейдите к моменту, подобному этому, он будет сравнивать и давать результат.
если вы не хотите, чтобы формат удалял его
moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")
Ответ 5
При использовании любого из запросов isBefore
isAfter
isSameOrBefore
, isSameOrAfter
isBetween
время были в правильном формате ISO: isBefore
, isAfter
, isSameOrBefore
, isSameOrAfter
, isBetween
Таким образом, вместо 2014-03-24T01:14: 000, ваша дата и время должны быть либо:
2014-03-24T01:14: 00 или 2014-03-24T01:14: 00.000Z
в противном случае вы можете получить следующее предупреждение об устаревании, и условие оценивается как ложное:
Предупреждение об устаревании: предоставленное значение не соответствует распознанному формату RFC2822 или ISO. момент конструирования возвращается к js Date(), который не надежен во всех браузерах и версиях. Форматы дат, отличные от RFC2822/ISO, не рекомендуется и будут удалены в следующем основном выпуске. Пожалуйста, обратитесь к http://momentjs.com/guides/#/warnings/js-date/ для получения дополнительной информации.
// https://momentjs.com/docs/#/query/
const dateIsAfter = moment('2014-03-24T01:15:00.000Z').isAfter(moment('2014-03-24T01:14:00.000Z'));
const dateIsSame = moment('2014-03-24T01:15:00.000Z').isSame(moment('2014-03-24T01:14:00.000Z'));
const dateIsBefore = moment('2014-03-24T01:15:00.000Z').isBefore(moment('2014-03-24T01:14:00.000Z'));
console.log('Date is After: ${dateIsAfter}');
console.log('Date is Same: ${dateIsSame}');
console.log('Date is Before: ${dateIsBefore}');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.0/moment.min.js"
></script>
Ответ 6
Я должен сделать это в моем случае, когда пользователь открывает предложение из истории транзакций, если дата начала предложения меньше текущей, мне нужно было показать текущую дату в качестве даты начала.
var startDate = "20/05/2018";
var date1 = moment().format("YYYY-MM-DD");
var date2 = moment(startDate).format("YYYY-MM-DD");
// and i checked with if statement
if(date1 > date2){ // if startDate is less than today
startDate = date1;
}else{ // if startDate is greater than today
}
ПРИМЕЧАНИЕ: мне нужно было конвертировать обе даты в один и тот же формат, и я использовал "ГГГГ-ММ-ДД".
Ответ 7
moment(d).isAfter(ahead30now); // true
http://momentjs.com/docs/#/query/is-after/
if (moment(d).isAfter(ahead30now)) {
// allow input time
console.log('UTC TIME DB', d.format());
} else {
}
Ответ 8
var startDate = moment(startDateVal, "DD.MM.YYYY");//Date format
var endDate = moment(endDateVal, "DD.MM.YYYY");
var isAfter = moment(startDate).isAfter(endDate);
if (isAfter) {
window.showErrorMessage("Error Message");
$(elements.endDate).focus();
return false;
}