Operaciones con duraciones en Moment.js
Moment.js también tiene objetos de duración. Mientras que un moment se define como un único punto en el tiempo, una duración se define como un período de tiempo.
Las duraciones no tienen fecha de inicio y fin definida. No tienen contexto.
Una duración es conceptualmente más similar a “2 horas” que a “entre las 2 y las 4 de la tarde de hoy”. Como tales, no son una buena solución para convertir entre unidades que dependen del contexto.
Por ejemplo, un año se puede definir como 366 días, 365 días, 365,25 días, 12 meses o 52 semanas. Intentar convertir años en días no tiene sentido sin contexto. Es mucho mejor usar moment#diff para calcular días o años entre dos momentos que usar Duration.
Como se analiza aquí, el formato de duración de Moment.js difiere muy ligeramente de las especificaciones de duración nominal ISO 8601 y duración RFC 5545.
Creación de duraciones
moment.duration(Number, String);moment.duration(Number);moment.duration(Object);moment.duration(String);moment.duration(String, String); // 2.25.0Para crear una duración, llama a moment.duration() con la duración en milisegundos.
moment.duration(100); // 100 milisegundosSi deseas crear un moment con una unidad de medida distinta de milisegundos, también puedes pasar la unidad de medida.
moment.duration(2, 'seconds');moment.duration(2, 'minutes');moment.duration(2, 'hours');moment.duration(2, 'days');moment.duration(2, 'weeks');moment.duration(2, 'months');moment.duration(2, 'years');moment.duration('2', 'years'); // desde 2.25.0La misma abreviatura para moment#add y moment#subtract también funciona aquí.
| Clave | Abreviatura |
|---|---|
| years | y |
| months | M |
| weeks | w |
| days | d |
| hours | h |
| minutes | m |
| seconds | s |
| milliseconds | ms |
Al igual que moment#add, puedes pasar un objeto de valores si necesitas varias unidades de medida diferentes.
moment.duration({ seconds: 2, minutes: 2, hours: 2, days: 2, weeks: 2, months: '2', years: '2'});A partir de 2.1.0, moment admite el análisis de períodos de tiempo de estilo ASP.NET. Se admiten los siguientes formatos.
El formato es una cadena de hora, minuto y segundo separada por dos puntos, como 23:59:59. El número de días puede ir precedido de un separador de puntos como 7.23:59:59. También se admiten segundos parciales 23:59:59.999.
moment.duration('23:59:59');moment.duration('23:59:59.999');moment.duration('7.23:59:59.999');moment.duration('23:59'); // añadido en 2.3.0A partir de 2.3.0, moment también admite el análisis (parsing) de duraciones ISO 8601.
moment.duration('P1Y2M3DT4H5M6S');moment.duration('P1M');A partir de 2.11.0, se admiten cadenas de formato de duración con un espacio entre días y lo demás.
moment.duration('7 23:59:59.999');A partir de 2.13.0, se admiten signos mixtos negativos y positivos al analizar duraciones.
moment.duration('PT-6H3M')A partir de 2.18.0, se admiten duraciones no válidas, al igual que moments no válidos. Para crear una duración no válida, puede pasar NaN como valor de una unidad.
En las próximas versiones, se espera que las duraciones no válidas cubran más casos (como valores null para unidades).
moment.duration(NaN);moment.duration(NaN, 'days');moment.duration.invalid();Clonar duraciones
moment.duration().clone();Crea un clon de una duración. Las duraciones son mutables, al igual que los objetos moment, por lo que esto te permite obtener una instantánea en un punto en el tiempo.
var d1 = moment.duration();var d2 = d1.clone();d1.add(1, 'second');d1.asMilliseconds() !== d2.asMilliseconds();Humanizar duraciones
moment.duration().humanize();moment.duration().humanize(withSuffix);moment.duration().humanize(withSuffix, thresholds); // from 2.25.0moment.duration().humanize(thresholds); // from 2.25.0Algunas veces querrás todas las bondades de moment#from, pero sin tener que crear dos moments, solo querrás mostrar un período de tiempo.
Ingresa moment.duration().humanize().
moment.duration(1, "minutes").humanize(); // a minutemoment.duration(2, "minutes").humanize(); // 2 minutesmoment.duration(24, "hours").humanize(); // a dayDe forma predeterminada, la cadena de retorno describe una duración a month (sin sufijo).
Si deseas una duración orientada in a month, a month ago (con sufijo), pasa true como se ve a continuación.
moment.duration(1, "minutes").humanize(true); // in a minutePara los sufijos anteriores a ahora, pasa un número negativo.
moment.duration(-1, "minutes").humanize(true); // a minute agoLas duraciones no válidas se humanizan en la versión localizada de Invalid Date.
moment.duration.invalid().humanize(); // Invalid DateLa salida humanizada se puede configurar con umbrales de tiempo relativos. Para especificar umbrales para una invocación particular de humanizar, pásalos como argumento único o después del sufijo arg:
moment.duration(-1, 'week').humanize(true, {d: 7, w: 4}); // a week agomoment.duration(-1, 'week').humanize({d: 7, w: 4}); // a weekNota: Pasar los umbrales en humanizar se agregó en 2.25.0.
Milisegundos en una duración
moment.duration().milliseconds();moment.duration().asMilliseconds();Para obtener la cantidad de milisegundos en una duración, usa moment.duration().milliseconds().
Devolverá un número entre 0 y 999.
moment.duration(500).milliseconds(); // 500moment.duration(1500).milliseconds(); // 500moment.duration(15000).milliseconds(); // 0Si deseas que la duración esté en milisegundos, utiliza moment.duration().asMilliseconds() en su lugar.
moment.duration(500).asMilliseconds(); // 500moment.duration(1500).asMilliseconds(); // 1500moment.duration(15000).asMilliseconds(); // 15000Segundos en una duración
moment.duration().seconds();moment.duration().asSeconds();Para obtener la cantidad de segundos en una duración, usa moment.duration().seconds().
Devolverá un número entre 0 y 59.
moment.duration(500).seconds(); // 0moment.duration(1500).seconds(); // 1moment.duration(15000).seconds(); // 15Si deseas la duración en segundos, utiliza moment.duration().asSeconds() en su lugar.
moment.duration(500).asSeconds(); // 0.5moment.duration(1500).asSeconds(); // 1.5moment.duration(15000).asSeconds(); // 15Minutos en una duración
moment.duration().minutes();moment.duration().asMinutes();Al igual que con los otros getters de duraciones, moment.duration().minutes() obtiene los minutos (0 - 59).
moment.duration().asMinutes() obtiene la duración en minutos.
Horas en una duración
moment.duration().hours();moment.duration().asHours();Al igual que con los otros getters de duraciones, moment.duration().hours() obtiene las horas (0 - 23).
moment.duration().asHours() obtiene la duración en horas.
Días en una duración
moment.duration().days();moment.duration().asDays();Al igual que con los otros getters de duraciones, moment.duration().days() obtiene los días (0 - 30).
moment.duration().asDays() obtiene la duración en días.
Semanas en una duración
moment.duration().weeks();moment.duration().asWeeks();Al igual que con los otros getters de duraciones, moment.duration().weeks() obtiene las semanas (0 - 4).
moment.duration().asWeeks() obtiene la duración en semanas.
Presta atención a que, a diferencia de otros getters de duración, las semanas se cuentan como un subconjunto de los días y no se eliminan del recuento de días.
Nota: La longitud de una duración en semanas se define como 7 días.
Meses en una duración
moment.duration().months();moment.duration().asMonths();Al igual que con los otros getters de duraciones, moment.duration().months() obtiene los meses (0 - 11).
moment.duration().asMonths() obtiene la duración en meses.
Años en una duración
moment.duration().years();moment.duration().asYears();Al igual que con los otros getters de duraciones, moment.duration().years() obtiene los años.
moment.duration().asYears() obtiene la duración en años.