Skip to content

smartin85/moment-immutable

Repository files navigation

moment-immutable

MIT License npm version npm downloads Build Status Coverage Status Known Vulnerabilities

Buy me a coffee

Make moment.js immutable (moments and durations)

Getting Started

moment-immutable can be included in your app by different ways:

Node.js

moment-immutable can be installed with npm and required into a script:

npm install --save moment-immutable
var moment = require('moment');
require('moment-immutable');

Browser

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>

Browser with Require.js

define(["moment", "moment-immutable"], function (moment) {
    // you probably won´t need a reference to moment-immutable istself, so include it last
});

Bower

bower install --save moment-immutable

Working without 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"

Working with moment-immutable

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"

Converting mutable methods of other plugins to immutable methods

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