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
Comprueba si un moment es anterior a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
Si 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.
Al igual que moment#isAfter
y moment#isSame
, cualquiera de las unidades de tiempo que se admiten para moment#startOf
se admiten para moment#isBefore
.
Si 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
Comprueba si un moment es igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
Si deseas limitar la granularidad a una unidad que no sea milisegundos, pásala como segundo parámetro.
Al 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
.
Al igual que moment#isAfter
y moment#isBefore
, cualquiera de las unidades de tiempo admitidas para moment#startOf
también lo son para moment#isSame
.
Si los dos moments tienen zonas horarias diferentes, se utilizará la zona horaria del primer moment para la comparación.
NOTA: 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
Comprueba si un moment es posterior a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
Si 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.
Al igual que moment#isSame
y moment#isBefore
, cualquiera de las unidades de tiempo que se admiten para moment#startOf
se admiten para moment#isAfter
.
Si no se pasa nada a moment#isAfter
, la hora actual será la predeterminada.
El método isSameOrBefore
Comprueba si un moment es anterior o igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
Si 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.
Al igual que moment#isAfter
y moment#isSame
, cualquiera de las unidades de tiempo admitidas para moment#startOf
también lo son para moment#isSameOrBefore
:
El método isSameOrAfter
Comprueba si un moment es posterior o igual a otro moment. El primer argumento se analizará como un moment, si no lo es ya.
Si 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.
Al igual que moment#isSame
y moment#isBefore
, cualquiera de las unidades de tiempo admitidas para moment#startOf
también lo son para moment#isSameOrAfter
:
El método isBetween
Compruebe 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.
Ten en cuenta que el orden de los dos argumentos es importante: la fecha “más pequeña” debe estar en el primer argumento.
Si deseas limitar la granularidad a una unidad que no sea milisegundos, pasa las unidades como tercer parámetro.
Al 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.
Ten 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
.
Si no se especifica el parámetro de inclusión, Moment utilizará de forma predeterminada ()
.
El método isDST
(Is Daylight Saving Time)
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.
El método 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:
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
devuelve true
si ese año es bisiesto, y false
si no lo es.
El método isMoment
Para comprobar si una variable es un objeto de moment, utiliza moment.isMoment()
.
Desde la versión 2.11.0, también puedes probar un objeto Moment mediante el operador instanceof
:
El método isDate
Para comprobar si una variable es un objeto Date
nativo, utiliza moment.isDate()
.