Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

433
Vistas
¿Cómo soluciono la mutabilidad en moment.js?

Me encontré con un problema en el que tengo que almacenar los valores iniciales de un objeto de momento, pero tengo algunos problemas para evitar que mi variable cambie junto con el objeto original.

Desafortunadamente Object.freeze() no funciona, porque moment.js devuelve un Invalid date válida cuando intento formatear eso.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Hay un complemento Moment.js en NPM llamado frozen-moment : puede usar moment().freeze() en lugar de Object.freeze(moment()) .

De lo contrario, Vanilla Moment.js tiene un método de clone que debería ayudarlo a evitar problemas de mutabilidad, por lo que podría hacer algo como esto:

 var a = moment(), b = a.clone(); // or moment(a)

ACTUALIZAR:

Han pasado dos años desde que escribí esta respuesta. En este tiempo, ha surgido otra biblioteca para trabajar con fechas y ganó mucha tracción: https://date-fns.org/

Esta biblioteca es inmutable de forma predeterminada y sigue una arquitectura modular y funcional, lo que significa que se adapta mejor a la agitación de árboles y la agrupación del lado del cliente. Si está trabajando en un proyecto que hace un uso extensivo de Webpack en el lado del cliente y encuentra que Moment.js le está causando problemas con su compilación, o incluso si la mutabilidad de Moment.js le está causando muchos dolores de cabeza, entonces debería probar date-fns .

over 4 years ago · Santiago Trujillo Denunciar

0

Es una vieja pregunta y disculpas por la autopromoción desvergonzada ya que esta no es mi intención, solo espero que ayude a alguien.

Además de lo que dice razorbeard ( .clone() etc.), creé un módulo NPM que adjunta métodos inmutables a cualquier cosa que venga con Moment.js. La intención no es romper el código existente, por lo que el módulo agrega nuevos métodos con Immu agregado a su nombre.

Cada instancia devuelta por moment factory estará decorada con métodos inmutables, por ejemplo, moment().startOf() tendrá startOfImmu() correspondiente, add() tendrá addImmu() etc. Cada uno de ellos devuelve un nuevo momento en lugar de modificar uno existente. Para usarlo, simplemente pase moment factory a momentImmutableMethods para obtener acceso a nuevos métodos inmutables. Ejemplo:

 var moment = require('moment'); // or moment-timezone import { momentImmutableMethods } from 'moment-immutable-methods'; // to decorate instances with immutable methods we need to extend moment factory as below: momentImmutableMethods(moment); // now every instance returned by moment will have Immu methods attached. // IMMUTABLE EXAMPLE // we using immutable methods that were attached to every instance, these have Immu appended to original name const ddd = moment({ hour: 5, minute: 10 }); // Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …} const eee = ddd.startOfImmu('day'); // Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …} console.log(ddd === eee); // false const fff = eee.startOfImmu('month'); // Moment {_isAMomentObject: true, _i: {…}, _isUTC: false, _pf: {…}, _locale: Locale, …} console.log(ddd === fff); // false console.log(eee === fff); // false console.log(ddd.format('DD/MM/YY HH:mma')); // "14/04/18 05:10am" console.log(eee.format('DD/MM/YY HH:mma')); // "14/04/18 00:00am" console.log(fff.format('DD/MM/YY HH:mma')); // "08/04/18 00:00am"

Está en NPM en https://www.npmjs.com/package/moment-immutable-methods

over 4 years ago · Santiago Trujillo Denunciar

0

También puede usar la biblioteca day.js que tiene casi la API exacta de moment.js pero es inmutable.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda