validacion - validar formulario javascript html5
Momento js fecha hora comparaciĆ³n (7)
Estoy usando moment.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 lograrlo. Sé que estará allí.
Este es mi codigo
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. No se por que
Creo que estás buscando las funciones de consulta , isBefore
, isSame
y isAfter
.
Pero es un poco difícil decir exactamente lo que estás intentando. ¿Quizás solo está buscando obtener la diferencia entre la hora 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 quiso 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 utilizando:
.tz(''UTC'')
incorrectamente..tz
pertenece a moment-timezone . No necesita usar eso a menos que esté trabajando con otras zonas horarias, comoAmerica/Los_Angeles
.Si desea analizar un valor como UTC, utilice:
moment.utc(theStringToParse)
O, si desea analizar un valor local y convertirlo en UTC, entonces use:
moment(theStringToParse).utc()
O quizás no lo necesites en absoluto. El hecho de 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ás recibiendo la instancia "ahora" por
moment(new Date())
. En su lugar, puedes 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'');
Deberías poder 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>
Es importante que su fecha y hora esté en el formato ISO correcto al usar cualquiera de las consultas de isBefore
: isBefore
, isAfter
, isSameOrBefore
, isSameOrAfter
, isBetween
Entonces, en lugar de 2014-03-24T01: 14: 000, su fecha y hora debe ser:
2014-03-24T01: 14: 00 o 2014-03-24T01: 14: 00.000Z
de lo contrario, puede recibir la siguiente advertencia de desaprobación y la condición se evaluará como falsa:
Advertencia de deprecación: el valor proporcionado no está en un formato RFC2822 o ISO reconocido. la construcción del momento recae en js Date (), que no es confiable en todos los navegadores y versiones. Los formatos de fecha que no sean RFC2822 / ISO no se recomiendan y se eliminarán en una próxima versión importante. Consulte http://momentjs.com/guides/#/warnings/js-date/ para obtener 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>
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
Pasa la fecha al momento como este lo comparará y dará resultado. Si no quieres formato quítalo
moment(Date1).format("YYYY-MM-DD") > moment(Date2).format("YYYY-MM-DD")
Tengo que hacer esto en mi caso, cuando el usuario abre una oferta del historial de transacciones si la fecha de inicio de la oferta es menor que la fecha actual que necesitaba para 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é "YYYY-MM-DD".
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 {
}