Cómo realizar consultas a un objeto Moment
En ocasiones necesitaremos realizar consultas a un objeto Moment para conocer su estado o comparar su valor con otro objeto Moment, para estos casos Moment.js cuenta con una serie de métodos útiles.
El método isBefore
moment().isBefore(Moment|String|Number|Date|Array);moment().isBefore(Moment|String|Number|Date|Array, String);Comprueba si un moment es anterior a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
moment('2010-10-20').isBefore('2010-10-21'); // trueSi deseas limitar la granularidad a una unidad que no sea milisegundos, pasa las unidades como segundo parámetro.
Como el segundo parámetro determina la precisión, y no solo un valor a verificar, el uso de day verificará el año, el mes y el día.
moment('2010-10-20').isBefore('2010-12-31', 'year'); // falsemoment('2010-10-20').isBefore('2011-01-01', 'year'); // trueAl igual que moment#isAfter y moment#isSame, cualquiera de las unidades de tiempo que se admiten para moment#startOf se admiten para moment#isBefore.
year month week isoWeek day hour minute secondSi no se pasa nada a moment#isBefore, la hora actual será la hora predeterminada.
NOTA: moment().isBefore() tiene un comportamiento indefinido y no debe usarse. Si el código se ejecuta rápido, el momento inicial creado sería el mismo que el creado en isBefore para realizar la verificación, por lo que el resultado sería false. Pero si el código se ejecuta más lento, es posible que el momento creado en isBefore sea mensurablemente posterior al creado en moment(), por lo que la llamada devolvería true.
El método isSame
moment().isSame(Moment|String|Number|Date|Array);moment().isSame(Moment|String|Number|Date|Array, String);Comprueba si un moment es igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
moment('2010-10-20').isSame('2010-10-20'); // trueSi deseas limitar la granularidad a una unidad que no sea milisegundos, pásala como segundo parámetro.
moment('2010-10-20').isSame('2009-12-31', 'year'); // falsemoment('2010-10-20').isSame('2010-01-01', 'year'); // truemoment('2010-10-20').isSame('2010-12-31', 'year'); // truemoment('2010-10-20').isSame('2011-01-01', 'year'); // falseAl incluir un segundo parámetro, coincidirá con todas las unidades iguales o mayores. Al pasar month, se verificarán month y year. Al pasar day, se verificarán day, month y year.
moment('2010-01-01').isSame('2011-01-01', 'month'); // false, año diferentemoment('2010-01-01').isSame('2010-02-01', 'day'); // false, mes diferenteAl igual que moment#isAfter y moment#isBefore, cualquiera de las unidades de tiempo admitidas para moment#startOf también lo son para moment#isSame.
year month week isoWeek day hour minute secondSi los dos moments tienen zonas horarias diferentes, se utilizará la zona horaria del primer moment para la comparación.
// Note: Australia/Sydney is UTC+11:00 on these datesmoment.tz("2018-11-09T10:00:00", "Australia/Sydney").isSame(moment.tz("2018-11-08T12:00:00", "UTC"), "day"); // falsemoment.tz("2018-11-08T12:00:00", "UTC").isSame(moment.tz("2018-11-09T10:00:00", "Australia/Sydney"), "day"); // trueNOTA: moment().isSame() tiene un comportamiento indefinido y no debe usarse. Si el código se ejecuta rápido, el moment inicial creado sería el mismo que el creado en isSame para realizar la verificación, por lo que el resultado sería true. Pero si el código se ejecuta más lento, es posible que el momento creado en isSame sea considerablemente posterior al creado en moment(), por lo que la llamada devolvería false.
El método isAfter
moment().isAfter(Moment|String|Number|Date|Array);moment().isAfter(Moment|String|Number|Date|Array, String);Comprueba si un moment es posterior a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
moment('2010-10-20').isAfter('2010-10-19'); // trueSi deseas limitar la granularidad a una unidad que no sea milisegundos, pase las unidades como segundo parámetro.
Como el segundo parámetro determina la precisión, y no solo un valor a verificar, el uso de day verificará el año, el mes y el día.
moment('2010-10-20').isAfter('2010-01-01', 'year'); // falsemoment('2010-10-20').isAfter('2009-12-31', 'year'); // trueAl igual que moment#isSame y moment#isBefore, cualquiera de las unidades de tiempo que se admiten para moment#startOf se admiten para moment#isAfter.
year month week isoWeek day hour minute secondSi no se pasa nada a moment#isAfter, la hora actual será la predeterminada.
moment().isAfter(); // falseEl método isSameOrBefore
moment().isSameOrBefore(Moment|String|Number|Date|Array);moment().isSameOrBefore(Moment|String|Number|Date|Array, String);Comprueba si un moment es anterior o igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
moment('2010-10-20').isSameOrBefore('2010-10-21'); // truemoment('2010-10-20').isSameOrBefore('2010-10-20'); // truemoment('2010-10-20').isSameOrBefore('2010-10-19'); // falseSi deseas limitar la granularidad a una unidad que no sea milisegundos, pasa las unidades como segundo parámetro.
Como el segundo parámetro determina la precisión, y no solo un valor a verificar, el uso de day verificará el año, el mes y el día.
moment('2010-10-20').isSameOrBefore('2009-12-31', 'year'); // falsemoment('2010-10-20').isSameOrBefore('2010-12-31', 'year'); // truemoment('2010-10-20').isSameOrBefore('2011-01-01', 'year'); // trueAl igual que moment#isAfter y moment#isSame, cualquiera de las unidades de tiempo admitidas para moment#startOf también lo son para moment#isSameOrBefore:
year month week isoWeek day hour minute secondEl método isSameOrAfter
moment().isSameOrAfter(Moment|String|Number|Date|Array);moment().isSameOrAfter(Moment|String|Number|Date|Array, String);Comprueba si un moment es posterior o igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
moment('2010-10-20').isSameOrAfter('2010-10-19'); // truemoment('2010-10-20').isSameOrAfter('2010-10-20'); // truemoment('2010-10-20').isSameOrAfter('2010-10-21'); // falseSi deseas limitar la granularidad a una unidad que no sea milisegundos, pasa las unidades como segundo parámetro.
Como el segundo parámetro determina la precisión, y no solo un valor a verificar, el uso de day verificará el año, el mes y el día.
moment('2010-10-20').isSameOrAfter('2011-12-31', 'year'); // falsemoment('2010-10-20').isSameOrAfter('2010-01-01', 'year'); // truemoment('2010-10-20').isSameOrAfter('2009-12-31', 'year'); // trueAl igual que moment#isSame y moment#isBefore, cualquiera de las unidades de tiempo admitidas para moment#startOf también lo son para moment#isSameOrAfter:
year month week isoWeek day hour minute secondEl método isBetween
// Desde 2.13.0 en adelantemoment().isBetween(moment-like, moment-like);moment().isBetween(moment-like, moment-like, String);moment().isBetween(moment-like, moment-like, String, String);// donde moment-like es Moment|String|Number|Date|Array
// Desde 2.9.0 a 2.12.0moment().isBetween(moment-like, moment-like);moment().isBetween(moment-like, moment-like, String);// donde moment-like es Moment|String|Number|Date|ArrayCompruebe si un moment está entre otros dos moments, opcionalmente mirando la escala de unidades (minutos, horas, días, etc.). El match es exclusivo. Los dos primeros argumentos se analizarán como moments, si no lo han sido ya.
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // truemoment('2010-10-20').isBetween('2010-10-19', undefined); // true, since moment(undefined) evaluates as moment()Ten en cuenta que el orden de los dos argumentos es importante: la fecha “más pequeña” debe estar en el primer argumento.
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // truemoment('2010-10-20').isBetween('2010-10-25', '2010-10-19'); // falseSi deseas limitar la granularidad a una unidad que no sea milisegundos, pasa las unidades como tercer parámetro.
moment('2010-10-20').isBetween('2010-01-01', '2012-01-01', 'year'); // falsemoment('2010-10-20').isBetween('2009-12-31', '2012-01-01', 'year'); // trueAl igual que moment#isSame, moment#isBefore, moment#isAfter, cualquiera de las unidades de tiempo que se admiten para moment#startOf se admiten para moment#isBetween: year, month, week, isoWeek, day, hour, minute, y second.
La versión 2.13.0 introduce la inclusión. Un [ indica la inclusión de un valor. Un ( indica exclusión.
Si se utilizas el parámetro de inclusión, se deben pasar ambos indicadores.
moment('2016-10-30').isBetween('2016-10-30', '2016-12-30', undefined, '()'); //falsemoment('2016-10-30').isBetween('2016-10-30', '2016-12-30', undefined, '[)'); //truemoment('2016-10-30').isBetween('2016-01-01', '2016-10-30', undefined, '()'); //falsemoment('2016-10-30').isBetween('2016-01-01', '2016-10-30', undefined, '(]'); //truemoment('2016-10-30').isBetween('2016-10-30', '2016-10-30', undefined, '[]'); //trueTen en cuenta que en el caso de que los parámetros from y to sean los mismos, pero los parámetros de inclusión sean diferentes, prevalecerá false.
moment('2016-10-30').isBetween('2016-10-30', '2016-10-30', undefined, '(]'); //falseSi no se especifica el parámetro de inclusión, Moment utilizará de forma predeterminada ().
El método isDST (Is Daylight Saving Time)
moment().isDST();moment#isDST comprueba si el moment actual está en horario de verano.
NOTA: Esta función es un HACK. El moment no tiene forma de saber si una hora determinada está en horario de verano real o no. Algunos cambios de hora en una zona están relacionados con el horario de verano, otros no, y sin información completa de la zona horaria no se puede saber.
Moment actualmente verifica el horario de invierno y verano, y si el desplazamiento coincide con el desplazamiento de verano (y el horario de verano es diferente al de invierno), entonces informa el horario de verano. Esto funciona en la gran mayoría de los casos, pero como se mencionó anteriormente, no es “correcto” y no funcionará en todos los casos.
El evento moment-timezone (en el momento de escribir 0.5.37) no admite información DST (es decir, si el reloj está oficialmente en horario de verano en un momento determinado o no), por lo que para que las cosas mejoren, se han agregado algunas cosas nuevas (y el paquete tzdata) que tienen que suceder en moment-timezone.
moment([2011, 2, 12]).isDST(); // false, March 12 2011 is not DSTmoment([2011, 2, 14]).isDST(); // true, March 14 2011 is DST// Este ejemplo es para "en" locale: https://www.timeanddate.com/time/dst/2011.htmlEl método isDSTShifted
moment('2013-03-10 2:30', 'YYYY-MM-DD HH:mm').isDSTShifted()Nota: A partir de la versión 2.14.0, esta función está obsoleta. No da la respuesta correcta después de modificar el objeto de moment. Para obtener más información, consulta moment/3160
Otra parte importante de la validación es saber si la fecha ha sido movida por un horario de verano. Por ejemplo, en la mayor parte de los Estados Unidos:
moment('2013-03-10 2:30', 'YYYY-MM-DD HH:mm').format(); //=> '2013-03-10T01:30:00-05:00'Esto se debe a que el horario de verano cambia la hora de 2:00 a 3:00, por lo que 2:30 no es una hora real. El tiempo resultante depende del navegador, ya sea ajustando el tiempo hacia adelante o hacia atrás. Utiliza moment#isDSTShifted para probar esta condición.
Nota: antes de 2.3.0, los objetos Moment en esta condición siempre devolvían false para moment#isValid; ahora devuelven true.
El método isLeapYear
moment().isLeapYear();moment#isLeapYear devuelve true si ese año es bisiesto, y false si no lo es.
moment([2000]).isLeapYear() // truemoment([2001]).isLeapYear() // falsemoment([2100]).isLeapYear() // falseEl método isMoment
moment.isMoment(obj);Para comprobar si una variable es un objeto de moment, utiliza moment.isMoment().
moment.isMoment() // falsemoment.isMoment(new Date()) // falsemoment.isMoment(moment()) // trueDesde la versión 2.11.0, también puedes probar un objeto Moment mediante el operador instanceof:
moment() instanceof moment // trueEl método isDate
moment.isDate(obj);Para comprobar si una variable es un objeto Date nativo, utiliza moment.isDate().
moment.isDate(); // falsemoment.isDate(new Date()); // truemoment.isDate(moment()); // false