È una vecchia domanda e mi scuso per la spudorata autopromozione in quanto questa non è la mia intenzione, spero solo che possa aiutare qualcuno.
Oltre a ciò che dice razorbeard ( .clone()
ecc.) Ho creato il modulo NPM che collega metodi immutabili a qualsiasi cosa Moment.js venga fornito immediatamente. L'intenzione non è quella di rompere il codice esistente, quindi il modulo aggiunge nuovi metodi con Immu
aggiunto al suo nome.
Ogni istanza restituita da moment factory sarà decorata con metodi immutabili, ad esempio moment().startOf()
avrà corrispondenti startOfImmu()
, add()
avrà addImmu()
ecc. Ognuna di queste restituisce un nuovo momento piuttosto che modificare quello esistente. Per usarlo basta passare moment
factory a momentImmutableMethods
per avere accesso a nuovi metodi immutabili. Esempio:
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"
È su NPM su https://www.npmjs.com/package/moment-immutable-methods