Confronto della data di ora js

Sto usando moment.js per formattare la data, qui ho due valori di data e voglio ottenere una funzione particolare quando una data è maggiore dell’altra. Ho letto la maggior parte dei loro documenti, ma non ho trovato la funzione per raggiungere questo objective. So che ci sarà.

Questo è il mio codice

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 { } 

modificare

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

Qui, sto confrontando due date, ovvero 2014-03-24T01:15:000 > 2014-03-24T01:14:000 , aspettando che il primo sia maggiore del secondo, ma vada sempre nella condizione else. Non so perché?

    Credo che tu stia cercando le funzioni di query , isBefore , isSame e isAfter .

    Ma è un po ‘difficile dire esattamente cosa stai tentando. Forse stai solo cercando di ottenere la differenza tra il tempo di immissione e l’ora corrente? Se è così, considera la funzione differenza , diff . Per esempio:

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

    Alcune altre cose:

    • C’è un errore nella prima riga:

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

      Non funzionerà. Penso che intendessi:

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

      Certo, potresti anche:

       var date_time = '2013-03-24T10:15:20:12Z'; 
    • Stai utilizzando: .tz('UTC') modo errato. .tz appartiene a .tz -timezone . Non è necessario usarlo a meno che tu non stia lavorando con altri fusi orari, come America/Los_Angeles .

      Se si desidera analizzare un valore come UTC, utilizzare:

       moment.utc(theStringToParse) 

      Oppure, se vuoi analizzare un valore locale e convertirlo in UTC, usa:

       moment(theStringToParse).utc() 

      O forse non ne hai affatto bisogno. Solo perché il valore di input è in UTC, non significa che devi lavorare in UTC per tutta la tua funzione.

    • Sembra che tu stia ricevendo l’istanza “ora” per moment(new Date()) . Puoi invece usare solo il moment() .

    aggiornato

    Sulla base della tua modifica, penso che puoi fare questo:

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

    Oppure, se desideri assicurarti che i tuoi campi siano convalidati per essere nel formato corretto:

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

    Dovresti essere in grado di confrontarli direttamente.

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

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

    Il metodo restituisce 1 se dateTimeA è maggiore di dateTimeB

    Il metodo restituisce 0 se dateTimeA è uguale a dateTimeB

    Il metodo restituisce -1 se dateTimeA è minore di dateTimeB

    passare la data in un momento come questo si confronterà e darà risultato. se non vuoi il formato rimuovilo

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

    È importante che il datetime sia nel formato ISO corretto quando si utilizza una qualsiasi delle query momentjs : isBefore , isAfter , isSameOrBefore , isSameOrAfter , isBetween

    Quindi, anziché 2014-03-24T01: 14: 000, il tuo datetime dovrebbe essere:

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

    altrimenti potresti ricevere il seguente avviso di ritiro e la condizione verrà valutata come falso:

    Avviso di deprecazione: il valore fornito non è in un formato riconosciuto RFC2822 o ISO. la costruzione del momento ricade su js Date (), che non è affidabile su tutti i browser e le versioni. I formati di data non RFC2822 / ISO sono scoraggiati e verranno rimossi in una prossima major release. Per ulteriori informazioni, consultare 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}`); 
      
     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 { } 

    Devo farlo nel mio caso, quando l’utente apre una quotazione dalla cronologia delle transazioni se la data di inizio della quotazione è inferiore alla data corrente avevo bisogno di mostrare la data corrente come data di inizio.

     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 } 

    NOTA: per me era necessario convertire entrambe le date nello stesso formato e ho usato “YYYY-MM-DD”.