Es ist eine alte Frage und Entschuldigung für schamlose Eigenwerbung, da dies nicht meine Absicht ist, hoffe nur, dass es jemandem hilft.
Zusätzlich zu dem, was razorbeard sagt ( .clone()
usw.), habe ich ein NPM-Modul erstellt, das unveränderliche Methoden an alle Moment.js anfügt, die standardmäßig mitgeliefert werden. Der vorhandene Code soll nicht beschädigt werden, daher fügt das Modul neue Methoden hinzu, Immu
die an seinen Namen angehängt werden.
Jede Instanz, die von der Momentfabrik zurückgegeben wird, wird mit unveränderlichen Methoden dekoriert, z. B. moment().startOf()
hat entsprechende startOfImmu()
, add()
hat addImmu()
usw. Jede dieser Instanzen gibt einen neuen Moment zurück, anstatt den vorhandenen zu ändern. Um es zu verwenden, übergeben Sie einfach die moment
Factory momentImmutableMethods
, um Zugriff auf neue unveränderliche Methoden zu erhalten. Beispiel:
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"
Es ist auf NPM unter https://www.npmjs.com/package/moment-immutable-methods