Это старый вопрос, и извинения за бесстыдную саморекламу, поскольку это не мое намерение, просто надеюсь, что это кому-то поможет.
В дополнение к тому, что говорит razorbeard (и .clone()
т. Д.), Я создал модуль NPM, который присоединяет неизменяемые методы ко всему, что Moment.js поставляется из коробки. Цель состоит в том, чтобы не нарушать существующий код, поэтому модуль добавляет новые методы с Immu
добавлением к его имени.
Каждый экземпляр, возвращаемый фабрикой моментов, будет украшен неизменяемыми методами, например, moment().startOf()
будет иметь соответствующие startOfImmu()
, add()
будут иметь addImmu()
и т. Д. Каждый из них возвращает новый момент, а не изменяет существующий. Чтобы использовать его, просто передайте moment
factory, momentImmutableMethods
чтобы получить доступ к новым неизменяемым методам. Пример:
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"
Его на NPM по адресу https://www.npmjs.com/package/moment-immutable-methods