Make moment.js immutable (moments and durations)
moment-immutable can be included in your app by different ways:
moment-immutable can be installed with npm and required into a script:
npm install --save moment-immutable
var moment = require('moment');
require('moment-immutable');
Just include the momentjs script, all your other moment.js-plugins and then the moment-immutable script:
<script src="moment.js"></script>
<!-- All the other cool moment.js-plugins -->
<script src="moment-immutable.min.js"></script>
define(["moment", "moment-immutable"], function (moment) {
// you probably won´t need a reference to moment-immutable istself, so include it last
});
bower install --save moment-immutable
var january1st = moment("2017-01-01");
var february1st = january1st.add(1, "month");
january1st.format(); // "2017-02-01T00:00:00+01:00" - damn
february1st.format(); // "2017-02-01T00:00:00+01:00"
var january1st = moment("2017-01-01");
var february1st = january1st.add(1, "month");
january1st.format(); // "2017-01-01T00:00:00+01:00" - yeah
february1st.format(); // "2017-02-01T00:00:00+01:00"
By default moment-immutable is aware of all the mutable methods of moment.js (moments and durations) and moment-timezone.
For converting mutable methods of other plugins to immutable methods you can do this:
// If it is a method on moment-objects:
moment.immutable.addMomentMutable('period', 1); // makes the period-function immutable if it has at least 1 parameter
// If it is a method on a moment-duration-object
moment.immutable.addDurationMutable('set', 0); // makes the set-function immutable