{"_id":"@dawsonbotsford/moment-range","_rev":"3-f71543f940509a198c90e3bb02e93afb","name":"@dawsonbotsford/moment-range","description":"Wrapper around moment for fancy date ranges for Moment.js","dist-tags":{"latest":"3.0.0"},"versions":{"3.0.0":{"version":"3.0.0","name":"@dawsonbotsford/moment-range","description":"Wrapper around moment for fancy date ranges for Moment.js","author":{"name":"Gianni Chiappetta","email":"gianni@runlevel6.org","url":"http://butt.zone"},"contributors":[{"name":"Dawson Botsford","email":"dawsonb@uber.com"},{"name":"Adam Biggs","email":"adam.biggs@lightmaker.com"},{"name":"Matt Patterson","email":"matt@reprocessed.org","url":"http://reprocessed.org/"},{"name":"Stuart Kelly","email":"stuart.leigh83@gmail.com"},{"name":"Kevin Ross","email":"kevin.ross@alienfast.com","url":"http://www.alienfast.com"},{"name":"Scott Hovestadt","email":"scott.hovestadt@gmail.com"},{"name":"Nebel","email":"nebel08@gmail.com"},{"name":"Aristide Niyungeko","email":"niyungeko@gmail.com"},{"name":"Tymon Tobolski","email":"i@teamon.eu","url":"http://teamon.eu"},{"name":"Bradley Ayers","email":"bradley.ayers@gmail.com"},{"name":"Thomas Walpole","email":"twalpole@gmail.com"},{"name":"Daniel Sarfati","email":"daniel@knockrentals.com"}],"homepage":"https://github.com/gf3/moment-range","bugs":{"url":"https://github.com/gf3/moment-range/issues"},"main":"./dist/moment-range","directories":{"lib":"./lib"},"engines":{"node":"*"},"scripts":{"build":"grunt build && npm run jsdoc","jsdoc":"jsdoc -c .jsdoc","test":"grunt test"},"devDependencies":{"babel-preset-es2015":"^6.9.0","grunt":"~1.0.1","grunt-babel":"^6.0.0","grunt-cli":"^1.2.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-test":"~0.12.7","jsdoc":"^3.3.0","mocha":"^2.1.0","moment":"^2.14.1","should":"^9.0.2"},"repository":{"type":"git","url":"git+https://git@github.com/gf3/moment-range.git"},"license":{"type":"Public Domain","url":"https://github.com/gf3/moment-range/raw/master/UNLICENSE"},"gitHead":"6e58f8be4d190308996efe907a4795579a015f3d","_id":"@dawsonbotsford/moment-range@3.0.0","_shasum":"91267a7d3020858d25c69e02dfdc0f954ba4e59b","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"dawsonbotsford","email":"dawsonbotsford@gmail.com"},"dist":{"shasum":"91267a7d3020858d25c69e02dfdc0f954ba4e59b","tarball":"https://registry.npmjs.org/@dawsonbotsford/moment-range/-/moment-range-3.0.0.tgz","integrity":"sha512-jrk7nWV4dWkA+2wUx/oz0joFcGZ4OPHiX/hx4esbWD5Z86Y3gvqeIvN4sWNjP5YkT58uZiJ6pbTgcVjU7DpVDA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFf8K4Db5X43SIQm2llfMJUZRJF8bYuLChBXh8JGEEEeAiBzY7Y8EXcf3UK4eP0zwZzafO3vGKwjh3ipNYsfHz4wKA=="}]},"maintainers":[{"name":"dawsonbotsford","email":"dawsonbotsford@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/moment-range-3.0.0.tgz_1468272057857_0.8481388431973755"}}},"readme":"# moment-range\n\nFancy date ranges for [Moment.js][moment].\n\nDetailed API documentation can be found at: http://gf3.github.io/moment-range/DateRange.html\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n\n- [Examples](#examples)\n  - [Create](#create)\n  - [Contains / Within / Overlaps / Intersect / Add / Subtract](#contains--within--overlaps--intersect--add--subtract)\n  - [Iterate](#iterate)\n  - [Compare](#compare)\n  - [Equality](#equality)\n  - [Difference](#difference)\n  - [Conversion](#conversion)\n    - [`toArray`](#toarray)\n    - [`toDate`](#todate)\n    - [`toString`](#tostring)\n    - [`valueOf`](#valueof)\n  - [Center](#center)\n  - [Clone](#clone)\n- [Installation](#installation)\n  - [Browser](#browser)\n  - [NPM](#npm)\n  - [Bower](#bower)\n- [Running Tests](#running-tests)\n- [License](#license)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n\n## Examples\n\n### Create\n\nCreate a date range object:\n\n``` javascript\nvar _moment = require('moment');\nvar moment = require('moment-range')(moment);\n```\n\n(This uses dependency injection of the `moment` library to add additional functions on-top)\n\n<br>\n\n``` javascript\nvar start = new Date(2012, 0, 15);\nvar end   = new Date(2012, 4, 23);\nvar range = moment.range(start, end);\n```\n\nYou can also create a date range with moment objects:\n\n``` javascript\nvar start = moment(\"2011-04-15\", \"YYYY-MM-DD\");\nvar end   = moment(\"2011-11-27\", \"YYYY-MM-DD\");\nvar range = moment.range(start, end);\n```\n\nArrays work too:\n\n``` javascript\nvar dates = [moment(\"2011-04-15\", \"YYYY-MM-DD\"), moment(\"2011-11-27\", \"YYYY-MM-DD\")];\nvar range = moment.range(dates);\n```\n\nYou can also create a range from an [ISO 8601 time interval][interval] string:\n\n``` javascript\nvar timeInterval = \"2015-01-17T09:50:04+00:00/2015-04-17T08:29:55+00:00\";\nvar range = moment.range(timeInterval);\n```\n\nYou can also create a range from the start until the end of a named interval:\n\n``` javascript\nvar date = moment(\"2011-04-15\", \"YYYY-MM-DD\");\nvar range = date.range(\"month\");\n```\n\nYou can also create open-ended ranges which go to the earliest or latest possible date:\n\n``` javascript\nvar rangeUntil = moment.range(null, \"2011-05-05\");\nvar rangeFrom = moment.range(\"2011-03-05\", null);\nvar rangeAllTime = moment.range(null, null);\n```\n\n### Contains / Within / Overlaps / Intersect / Add / Subtract\n\nCheck to see if your range contains a date/moment:\n\n``` javascript\nvar start  = new Date(2012, 4, 1);\nvar end    = new Date(2012, 4, 23);\nvar lol    = new Date(2012, 4, 15);\nvar wat    = new Date(2012, 4, 27);\nvar range  = moment.range(start, end);\nvar range2 = moment.range(lol, wat);\n\nrange.contains(lol); // true\nrange.contains(wat); // false\n```\n\nA optional second parameter indicates if the end of the range\nshould be excluded when testing for inclusion\n\n``` javascript\nrange.contains(end) // true\nrange.contains(end, false) // true\nrange.contains(end, true) // false\n```\n\nFind out if your moment falls within a date range:\n\n``` javascript\nvar start = new Date(2012, 4, 1);\nvar end   = new Date(2012, 4, 23);\nvar when  = moment(\"2012-05-10\", \"YYYY-MM-DD\");\nvar range = moment.range(start, end);\n\nwhen.within(range); // true\n```\n\nDoes it overlap another range?\n\n``` javascript\nrange.overlaps(range2); // true\n```\n\nWhat are the intersecting ranges?\n\n``` javascript\nrange.intersect(range2); // [moment.range(lol, end)]\n```\n\nAdd/combine/merge overlapping ranges.\n\n``` javascript\nrange.add(range2); // [moment.range(start, wat)]\n\nvar range3 = moment.range(new Date(2012, 3, 1), new Date(2012, 3, 15);\nrange.add(range3); // [null]\n```\n\nSubtracting one range from another.\n\n``` javascript\nrange.subtract(range2); // [moment.range(start, lol)]\n```\n\n### Iterate\n\nIterate over your date range by an amount of time or another range:\n\n``` javascript\nvar start = new Date(2012, 2, 1);\nvar two   = new Date(2012, 2, 2);\nvar end   = new Date(2012, 2, 5);\nvar range1 = moment.range(start, end);\nvar range2 = moment.range(start, two); // One day\nvar acc = [];\n\nrange1.by('days', function(moment) {\n  // Do something with `moment`\n});\n```\n\nAny of the units accepted by [moment.js' `add`\nmethod](http://momentjs.com/docs/#/manipulating/add/) may be used.\n\nYou can also iterate by another range:\n\n``` javascript\nrange1.by(range2, function(moment) {\n  // Do something with `moment`\n  acc.push(moment);\n});\n\nacc.length == 5 // true\n```\n\nIteration also supports excluding the end value of the range by setting the\nlast parameter to `true`.\n\n``` javascript\nvar acc = [];\n\nrange1.by('d', function (moment) {\n  acc.push(moment)\n}, true);\n\nacc.length == 4 // true\n```\n\n### Compare\n\nCompare range lengths or add them together with simple math:\n\n``` javascript\nvar r_1 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15));\nvar r_2 = moment.range(new Date(1995, 0, 1), new Date(1995, 12, 25));\n\nr_2 > r_1 // true\n\nr_1 + r_2 // duration of both ranges in milliseconds\n\nMath.abs(r_1 - r_2); // difference of ranges in milliseconds\n```\n\n### Equality\n\nCheck if two ranges are the same, i.e. their starts and ends are the same:\n\n``` javascript\nvar r_1 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15));\nvar r_2 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15));\nvar r_3 = moment.range(new Date(2011, 3, 5), new Date(2011, 6, 15));\n\nr_1.isSame(r_2); // true\nr_2.isSame(r_3); // false\n```\n\n### Difference\n\nThe difference of the entire range given various units.\n\nAny of the units accepted by [moment.js' `add`\nmethod](http://momentjs.com/docs/#/manipulating/add/) may be used.\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 5, 5);\nvar dr    = moment.range(start, end);\n\ndr.diff('months'); // 3\ndr.diff('days'); // 92\ndr.diff(); // 7945200000\n```\n\n### Conversion\n\n#### `toArray`\n\nConverts the `DateRange` to an `Array` of `Date` objects.\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 5, 5);\nvar dr    = moment.range(start, end);\n\ndr.toArray('days'); // [new Date(2011, 2, 5), new Date(2011, 3, 5), new Date(2011, 4, 5), new Date(2011, 5, 5)]\n```\n\n#### `toDate`\n\nConverts the `DateRange` to an `Array` of the start and end `Date` objects.\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 5, 5);\nvar dr    = moment.range(start, end);\n\ndr.toDate(); // [new Date(2011, 2, 5), new Date(2011, 5, 5)]\n```\n\n#### `toString`\n\nConverting a `DateRange` to a `String` will format it as an [ISO 8601 time\ninterval][interval]:\n\n``` javascript\nvar start = '2015-01-17T09:50:04+00:00';\nvar end   = '2015-04-17T08:29:55+00:00';\nvar range = moment.range(moment.utc(start), moment.utc(end));\n\nrange.toString() // \"2015-01-17T09:50:04+00:00/2015-04-17T08:29:55+00:00\"\n```\n\n#### `valueOf`\n\nThe difference between the end date and start date in milliseconds.\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 5, 5);\nvar range = moment.range(start, end);\n\nrange.valueOf(); // 7945200000\n```\n\n### Center\n\nCalculate the center of a range\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 3, 5);\nvar dr    = moment.range(start, end);\n\ndr.center(); // 1300622400000\n```\n\n### Clone\n\nDeep clone a range\n\n``` javascript\nvar start = new Date(2011, 2, 5);\nvar end   = new Date(2011, 3, 5);\nvar dr    = moment.range(start, end);\n\nvar dr2 = dr.clone();\ndr2.start.add(2, 'days');\n\ndr2.start.toDate() === dr.start.toDate() // false\n```\n\n\n## Installation\n\nmoment-range works in both the browser and [node.js][node].\n\n### Node / NPM\n\nInstall via npm:\n\n``` sh\nnpm install @dawsonbotsford/moment-range\n```\n\nAnd then `require` it:\n\n``` javascript\nconst moment.range = require('moment-range');\n```\n\n## Running Tests\n\nInstall the dependencies:\n\n``` bash\nnpm install\n```\n\nDo all the things!\n\n``` bash\nnpm run build\nnpm run test\n```\n\n## License\n\nmoment-range is [UNLICENSED][unlicense].\n\n[cdnjs]: https://github.com/cdnjs/cdnjs\n[cdnjs-moment-range]: https://cdnjs.com/libraries/moment-range\n[interval]: http://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n[moment]: http://momentjs.com/\n[node]: http://nodejs.org/\n[unlicense]: http://unlicense.org/\n","maintainers":[{"name":"dawsonbotsford","email":"dawsonbotsford@gmail.com"}],"time":{"modified":"2022-06-12T16:57:31.064Z","created":"2016-07-11T21:20:58.333Z","3.0.0":"2016-07-11T21:20:58.333Z"},"homepage":"https://github.com/gf3/moment-range","repository":{"type":"git","url":"git+https://git@github.com/gf3/moment-range.git"},"contributors":[{"name":"Dawson Botsford","email":"dawsonb@uber.com"},{"name":"Adam Biggs","email":"adam.biggs@lightmaker.com"},{"name":"Matt Patterson","email":"matt@reprocessed.org","url":"http://reprocessed.org/"},{"name":"Stuart Kelly","email":"stuart.leigh83@gmail.com"},{"name":"Kevin Ross","email":"kevin.ross@alienfast.com","url":"http://www.alienfast.com"},{"name":"Scott Hovestadt","email":"scott.hovestadt@gmail.com"},{"name":"Nebel","email":"nebel08@gmail.com"},{"name":"Aristide Niyungeko","email":"niyungeko@gmail.com"},{"name":"Tymon Tobolski","email":"i@teamon.eu","url":"http://teamon.eu"},{"name":"Bradley Ayers","email":"bradley.ayers@gmail.com"},{"name":"Thomas Walpole","email":"twalpole@gmail.com"},{"name":"Daniel Sarfati","email":"daniel@knockrentals.com"}],"author":{"name":"Gianni Chiappetta","email":"gianni@runlevel6.org","url":"http://butt.zone"},"bugs":{"url":"https://github.com/gf3/moment-range/issues"},"license":{"type":"Public Domain","url":"https://github.com/gf3/moment-range/raw/master/UNLICENSE"},"readmeFilename":"README.md"}