Fancy date ranges for Moment.js.
Create a date range:
varstart=newDate(2012,0,15);varend=newDate(2012,4,23);varrange=moment().range(start,end);You can also create a date range with moment objects:
varstart=moment("2011-04-15","YYYY-MM-DD");varend=moment("2011-11-27","YYYY-MM-DD");varrange=moment().range(start,end);Check to see if your range contains a date/moment:
varstart=newDate(2012,4,1);varend=newDate(2012,4,23);varlol=newDate(2012,4,15);varwat=newDate(2012,2,27);varrange=moment().range(start,end);varrange2=moment().range(lol,wat);range.contains(lol);// truerange.contains(wat);// falseFind out if your moment falls within a date range:
varstart=newDate(2012,4,1);varend=newDate(2012,4,23);varwhen=moment("2012-05-10","YYYY-MM-DD");varrange=moment().range(start,end);when.within(range);// trueDoes it overlap another range?
range.overlaps(range2);// trueWhat are the intersecting ranges?
range.intersect(range2);// [moment().range(lol, end)]Subtracting one range from another.
range.subtract(range2);// [moment().range(start, lol)]Iterate over your date range by an amount of time or another range:
varstart=newDate(2012,2,1);vartwo=newDate(2012,2,2);varend=newDate(2012,2,5);varrange1=moment().range(start,end);varrange2=moment().range(start,two);// One dayvaracc=[];range1.by('days',function(moment){// Do something with `moment`});Any of the units accepted by moment.js' add method may be used.
You can also iterate by another range:
range1.by(range2,function(moment){// Do something with `moment`acc.push(moment);});acc.length==5// trueCompare range lengths or add them together with simple math:
varr_1=moment().range(newDate(2011,2,5),newDate(2011,3,15));varr_2=moment().range(newDate(1995,0,1),newDate(1995,12,25));r_2>r_1// truer_1+r_2// duration of both ranges in millisecondsMath.abs(r_1-r_2);// difference of ranges in millisecondsCheck if two ranges are the same, i.e. their starts and ends are the same:
varr_1=moment().range(newDate(2011,2,5),newDate(2011,3,15));varr_2=moment().range(newDate(2011,2,5),newDate(2011,3,15));varr_3=moment().range(newDate(2011,3,5),newDate(2011,6,15));r_1.isSame(r_2);// truer_2.isSame(r_3);// falseThe difference of the entire range given various units.
Any of the units accepted by moment.js' add method may be used.
varstart=newDate(2011,2,5);varend=newDate(2011,5,5);vardr=moment.range(start,end);dr.diff('months');// 3dr.diff('days');// 92dr.diff();// 7945200000varstart=newDate(2011,2,5);varend=newDate(2011,5,5);vardr=moment.range(start,end);dr.toDate();// [new Date(2011, 2, 5), new Date(2011, 5, 5)]moment-range works in both the browser and node.js.
Simply include moment-range after moment.js:
<scriptsrc="/javascripts/moment-range.js"></script>Thanks to the fine people at cdnjs, you can link to moment-range from the cdnjs servers.
Install via npm:
npm install moment-rangeOr put it in your package.json:
{"moment-range": "~1" }bower install moment-rangeClone this bad boy:
git clone https://[email protected]/gf3/moment-range.gitInstall the dependencies:
npm installDo all the things!
npm build npm testmoment-range is UNLICENSED.