C'est une vieille question et des excuses pour l'auto-promotion éhontée car ce n'est pas mon intention, j'espère juste que cela aidera quelqu'un.
En plus de ce que dit razorbeard ( .clone()
etc.), j'ai créé un module NPM qui attache des méthodes immuables à tout ce que Moment.js est livré avec. L'intention n'est pas de casser le code existant afin que le module ajoute de nouvelles méthodes avec Immu
en plus son nom.
Chaque instance retournée par moment factory sera décorée avec des méthodes immuables, par exemple moment().startOf()
aura correspondant startOfImmu()
, add()
aura addImmu()
etc. Chacune de ces instances renvoie un nouveau moment plutôt que de modifier l'existant. Pour l'utiliser, il suffit de passer moment
factory à momentImmutableMethods
pour accéder à de nouvelles méthodes immuables. Exemple:
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"
C'est sur NPM à https://www.npmjs.com/package/moment-immutable-methods