Momento js fecha hora comparación


Estoy usando el momento.js para formatear mi fecha y hora, aquí tengo dos valores de fecha, y quiero lograr una función particular cuando una fecha es mayor que la otra. Leí la mayoría de sus documentos, pero no encontré la función para lograr esto. Sé que estará ahí.

Este es mi código

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 {

}

Editar

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

Aquí, estoy comparando dos fechas, es decir, 2014-03-24T01:15:000 > 2014-03-24T01:14:000, esperando que la primera sea mayor que la segunda, pero siempre va a la condición else. Yo no ¿sabes por qué?

Author: Brett DeWoody, 2014-03-24

7 answers

Creo que está buscando las funciones de consulta , isBefore, isSame, y isAfter.

Pero es un poco difícil decir exactamente lo que estás intentando. Tal vez usted está buscando para obtener la diferencia entre el tiempo de entrada y la hora actual? Si es así, considere la función de diferencia , diff. Por ejemplo:

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

Algunas otras cosas:

  • Hay un error en la primera línea:

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

    Eso no va a funcionar. Creo que querías decir:

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

    Por supuesto, usted también podría:

    var date_time = '2013-03-24T10:15:20:12Z';
    
  • Estás usando: .tz('UTC') incorrectamente. .tzpertenece a zona horaria. No necesitas usar eso a menos que estés trabajando con otras zonas horarias, como America/Los_Angeles.

    Si desea analizar un valor como UTC, use:

    moment.utc(theStringToParse)
    

    O, si desea analizar un valor local y convertir a UTC, a continuación, utilice:

    moment(theStringToParse).utc()
    

    O tal vez usted no lo necesita en absoluto. Simplemente debido a que el valor de entrada está en UTC, no significa que tenga que trabajar en UTC a lo largo de su función.

  • Parece que está recibiendo la instancia" ahora " por moment(new Date()). En su lugar, puede usar moment().

Actualizado

Basado en tu edición, creo que puedes hacer esto:

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

O, si desea asegurarse de que sus campos están validados para estar en el formato correcto:

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');
 373
Author: Matt Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-24 16:28:41

Usted debe ser capaz de compararlos directamente.

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>
 149
Author: ryanwinchester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 15:39:51

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

El método devuelve 1 si dateTimeA es mayor que dateTimeB

El método devuelve 0 si dateTimeA es igual a dateTimeB

El método devuelve -1 si dateTimeA es menor que dateTimeB

 11
Author: Razan Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-05 02:50:03

Pase la fecha al momento así se comparará y dará resultado. si no quieres formato retírelo

moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")
 10
Author: vijay kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-07 11:19:49

Es importante que su datetime es en la correcta formato ISO cuando se utiliza cualquiera de los momentjs consultas: isBefore, isAfter, isSameOrBefore, isSameOrAfter, isBetween

Así que en lugar de 2014-03-24T01:14:000, su datetime debe ser:

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

De lo contrario, puede recibir la siguiente advertencia de obsolescencia y el la condición se evaluará como falsa:

Advertencia de obsolescencia: el valor proporcionado no está en un RFC2822 o Formato ISO. momento de construcción cae de nuevo a js Date (), que no es fiable en todos los navegadores y versiones. Fecha no RFC2822 / ISO los formatos se desaconsejan y se eliminarán en una próxima reunión importante lanzar. Por favor refiérase a http://momentjs.com/guides/#/warnings/js-date / para más información.

// 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>
 4
Author: JSON C11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-31 23:37:45
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 {

}
 2
Author: TV-C-15,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-17 21:49:17

Tengo que hacer esto en mi caso, cuando el usuario abre una cotización desde el historial de transacciones si la fecha de inicio de la cotización es menor que la fecha actual, necesitaba mostrar la fecha actual como fecha de inicio.

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 : para mí necesitaba convertir ambas fechas en el mismo formato y usé "AAAA-MM-DD".

 2
Author: KATJ Srinath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 05:52:53