Estoy usando momentJS para analizar las fechas y horas en mi aplicación, pero me encontré con un problema al intentar establecer condicionales con las horas.
Por ejemplo: necesito validar un campo donde necesito que la hora de dicho campo no sea más de 30 minutos antes que la hora de otro campo (es una práctica aeronáutica, el piloto necesita validar su presencia no más de 30 minutos antes del el motor arranca).
Intenté establecer una var con el límite de tiempo y la consulta IsAfter, pero sigo obteniendo tiempos repetidos en lugar del resultado deseado de 'tiempo -30 minutos'. Aquí está el código.
var firstTime = new moment( this._dateTimeToDateSQL( this.form.acionamento, $sessao.getDateFormat() + ' HH:MM' ) ) var secondTime = new moment( this._dateTimeToDateSQL( this.form.tripulacao[0].apresentacao, $sessao.getDateFormat() + ' HH:MM' ) ) var timeLimit = moment(firstTime.subtract(30, 'minutes')) if (moment(secondTime).isAfter(firstTime)) { this.form.tripulacao[0].err = 'error' pass = false } else if (moment(secondTime).isAfter(timeLimit)) { this.form.tripulacao[0].err = 'time limit reached' pass = false } else { this.form.tripulacao[0].err = '' }Probar:
var timeLimit = moment(firstTime).subtract(30, 'minutes');En vez de:
var timeLimit = moment(firstTime.subtract(30, 'minutes'));Parece funcionar para mí: http://jsfiddle.net/x6q5br7k/6/
(Consulte la consola para ver las diferencias de fecha)
let now = new Date(), firstTime = moment(new Date(now.getTime() + 60 * 60000)), // now plus an hour secondTime = moment(now), // now timeLimit = moment(firstTime).subtract(30, 'minutes'); // 30 minutes from now console.log( "firstTime:" + firstTime.toString(), "secondTime:" + secondTime.toString(), "timeLimit:" + timeLimit.toString() ) alert( moment(secondTime).isAfter(firstTime) ? 'error' : moment(secondTime).isAfter(timeLimit) ? 'time limit reached' : '' );