Момент в JS дата сравнение времени

Я использую момент.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, ожидая, что Первый больше, чем второй, но он всегда переходит в другое состояние. Не знаю почему?

7 ответов


я считаю, что вы ищете функции запроса, isBefore, isSame и isAfter.

но это немного трудно сказать точно, что вы пытаетесь. Возможно, вы просто хотите получить разницу между входным временем и текущим временем? Если это так, рассмотрим!--22-->функции разница, 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');

вы должны иметь возможность сравнивать их напрямую.

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>

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


передать дату в момент, как это будет сравнивать и дать результат. если вы не хотите формат удалить его

moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")

важно, чтобы ваше datetime было в правильном формат ISO при использовании запросы momentjs: isBefore, isAfter, isSameOrBefore, isSameOrAfter, isBetween

таким образом, вместо 2014-03-24T01:14: 000, ваше datetime должно быть либо:

2014-03-24T01:14:00 или 2014-03-24T01:14: 00.000 Z

в противном случае вы можете получить следующее предупреждение об устаревании и условие будет false:

осуждение предупреждение: значение не признал RFC2822 или формат ISO. построение момента возвращается к дате js (), которая не надежная во всех браузерах и версиях. Не RFC2822/ISO дата форматы не поощряются и будут удалены в предстоящем major освобождать. Пожалуйста ссылаться 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>

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 {

}

Я должен сделать это в моем случае, когда пользователь открывает предложение из истории транзакций, если дата начала предложения меньше текущей даты, мне нужно было показать текущую дату как дату начала.

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

}

Примечание: Для меня нужно было преобразовать обе даты в один формат, и я использовал "гггг-ММ-ДД".