536 Stimmen

Moment-js Datum Zeit Vergleich

Ich verwende moment.js, um mein Datum und Uhrzeit zu formatieren. Hier habe ich zwei Datumsangaben, und ich möchte eine bestimmte Funktion erreichen, wenn ein Datum größer ist als das andere. Ich habe die meisten ihrer Dokumente gelesen, aber die Funktion zum Erreichen dieses Ziels nicht gefunden. Ich weiß, sie wird da sein.

Dies ist mein Code:

var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'
var d = moment(date_time).tz('UTC'); // erstes Datum

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) {
    // Eingabezeit erlauben
    console.log('UTC-Zeit DB', d.format());
} else {

}

Bearbeiten

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 konvertiertes 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('ist nach true');
} else {
    console.log('ist nach ist falsch');
}

Hier vergleiche ich zwei Daten, d.h. 2014-03-24T01:15:000 > 2014-03-24T01:14:000, in der Erwartung, dass das erste größer ist als das zweite, aber es geht immer zur else-Bedingung. Ich weiß nicht warum?

698voto

Matt Johnson-Pint Punkte 212496

Ich glaube, du suchst die Abfrage-Funktionen, isBefore, isSame und isAfter.

Aber es ist ein bisschen schwierig zu sagen, was genau du versuchst. Vielleicht möchtest du einfach den Unterschied zwischen der Eingabezeit und der aktuellen Zeit herausfinden? Wenn ja, betrachte die difference Funktion, diff. Zum Beispiel:

moment().diff(date_time, 'minutes')

Ein paar andere Dinge:

  • Es gibt einen Fehler in der ersten Zeile:

      var date_time = 2013-03-24 + 'T' + 10:15:20:12 + 'Z'

    Das wird nicht funktionieren. Ich glaube du meintest:

      var date_time = '2013-03-24' + 'T' + '10:15:20:12' + 'Z';

    Natürlich könntest du auch einfach schreiben:

      var date_time = '2013-03-24T10:15:20:12Z';
  • Du nutzt .tz('UTC') falsch. .tz gehört zu moment-timezone. Du musst das nicht verwenden, es sei denn du arbeitest mit anderen Zeitzonen, wie America/Los_Angeles.

    Wenn du einen Wert als UTC parsen möchtest, dann verwende:

      moment.utc(theStringToParse)

    Oder wenn du einen lokalen Wert parsen und in UTC konvertieren möchtest, dann verwende:

      moment(theStringToParse).utc()

    Oder vielleicht benötigst du es gar nicht. Nur weil der Eingabewert in UTC ist, bedeutet das nicht, dass du während der gesamten Funktion in UTC arbeiten musst.

  • Es scheint, als würdest du die "Jetzt"-Instanz durch moment(new Date()) bekommen. Du kannst stattdessen einfach moment() verwenden.

Aktualisiert

Basierend auf deiner Bearbeitung, denke ich, dass du einfach dies tun kannst:

var date_time = req.body.date + 'T' + req.body.time + 'Z';
var isafter = moment(date_time).isAfter('2014-03-24T01:14:00Z');

Oder, wenn du sicherstellen möchtest, dass deine Felder im korrekten Format validiert werden:

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');

317voto

ryanwinchester Punkte 11007

Sie sollten in der Lage sein, sie direkt zu vergleichen.

var date = moment("2013-03-24")
var now = moment();

if (now > date) {
   // Datum liegt in der Vergangenheit
} else {
   // Datum liegt in der Zukunft
}

$(document).ready(function() {

  $('.compare').click(function(e) {

    var date = $('#date').val();

    var now = moment();
    var then = moment(date);

    if (now > then) {
      $('.result').text('Datum liegt in der Vergangenheit');
    } else {
      $('.result').text('Datum liegt in der Zukunft');
    }

  });

});

Datum mit aktuellem Datum vergleichen

53voto

JSON C11 Punkte 9927

Es ist wichtig, dass Ihr Datum und Ihre Uhrzeit im richtigen ISO-Format vorliegen, wenn Sie eines der momentjs-Abfragen verwenden: isBefore, isAfter, isSameOrBefore, isSameOrAfter, isBetween

Also, anstatt von 2014-03-24T01:14:000 sollte Ihr Datum und Ihre Uhrzeit entweder sein:

2014-03-24T01:14:00 oder 2014-03-24T01:14:00.000Z

sonst erhalten Sie die folgende Veraltungswarnung und die Bedingung wird als falsch ausgewertet:

Veraltungs-Warnung: Der bereitgestellte Wert entspricht nicht einem erkannten RFC2822- oder ISO-Format. Moment-Konstruktion greift zurück auf js Date(), das nicht zuverlässig in allen Browsern und Versionen ist. Nicht RFC2822/ISO-Datumsformate werden nicht empfohlen und werden in einem bevorstehenden Hauptrelease entfernt. Bitte beachten Sie http://momentjs.com/guides/#/warnings/js-date/ für weitere Informationen.

// 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(`Datum liegt nach: ${dateIsAfter}`);
console.log(`Datum ist gleich: ${dateIsSame}`);
console.log(`Datum liegt vor: ${dateIsBefore}`);

36voto

Razan Paul Punkte 12902

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"));

Die Methode gibt 1 zurück, wenn dateTimeA größer ist als dateTimeB

Die Methode gibt 0 zurück, wenn dateTimeA gleich dateTimeB ist

Die Methode gibt -1 zurück, wenn dateTimeA kleiner als dateTimeB ist

27voto

Tyagi Punkte 709

Für Datum-Zeit-Vergleiche können Sie die valueOf-Funktion von Moment verwenden, die Millisekunden des Datum-Zeit-Werts bereitstellt, was am besten für Vergleiche ist:

const date1 = moment('01-02-2020', 'DD-MM-YYYY').valueOf()
const date2 = moment('11-11-2012', 'DD-MM-YYYY').valueOf()

// console.log((date1 > date2 ? 'date1' : 'date2') + " is greater..."  )

if (date1 > date2) {
  console.log("date1 is greater...")
} else {
  console.log("date2 is greater...")
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X