Це старе питання та вибачення за безсоромне саморекламування, оскільки це не мій намір, просто сподіваюся, що це комусь допоможе.
На додаток до того, що говорить бритва ( .clone()
тощо), я створив модуль NPM, який приєднує незмінні методи до того, що Moment.js виходить із коробки. Намір не порушувати існуючий код, тому модуль додає нові методи із додаванням Immu
до його імені.
Кожен екземпляр, що повертається моментом, фабрика буде прикрашена незмінними методами, наприклад moment().startOf()
, матиме відповідні startOfImmu()
, add()
матиме і addImmu()
т. Д. Кожен з цих повертає новий момент, а не змінює існуючий. Для його використання просто пройдіть moment
завод, 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