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é?
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..tz
pertenece a zona horaria. No necesitas usar eso a menos que estés trabajando con otras zonas horarias, comoAmerica/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 usarmoment()
.
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');
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>
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
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")
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>
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 {
}
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".
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