intelogie / moment-range
This package is auto-updated.
Last update: 2024-08-29 04:37:01 UTC
README
为Moment.js提供高级日期范围。
详细的API文档可以在以下网址找到:http://gf3.github.io/moment-range/DateRange.html
示例
创建
创建日期范围
var start = new Date(2012, 0, 15); var end = new Date(2012, 4, 23); var range = moment.range(start, end);
您还可以使用moment对象创建日期范围
var start = moment("2011-04-15", "YYYY-MM-DD"); var end = moment("2011-11-27", "YYYY-MM-DD"); var range = moment.range(start, end);
数组也可以
var dates = [moment("2011-04-15", "YYYY-MM-DD"), moment("2011-11-27", "YYYY-MM-DD")]; var range = moment.range(dates);
您还可以从ISO 8601时间间隔字符串创建范围
var timeInterval = "2015-01-17T09:50:04+00:00/2015-04-17T08:29:55+00:00"; var range = moment.range(timeInterval);
您还可以从命名间隔的开始直到结束创建范围
var date = moment("2011-04-15", "YYYY-MM-DD"); var range = date.range("month");
您还可以创建开放端点的范围,这些范围延伸到最早或最晚的可能日期
var rangeUntil = moment.range(null, "2011-05-05"); var rangeFrom = moment.range("2011-03-05", null); var rangeAllTime = moment.range(null, null);
包含 / 在内 / 交叉 / 交集 / 添加 / 减去
检查您的范围是否包含日期/moment
var start = new Date(2012, 4, 1); var end = new Date(2012, 4, 23); var lol = new Date(2012, 4, 15); var wat = new Date(2012, 4, 27); var range = moment.range(start, end); var range2 = moment.range(lol, wat); range.contains(lol); // true range.contains(wat); // false
可选的第二个参数表示在测试包含时是否应排除范围的末尾
range.contains(end) // true range.contains(end, false) // true range.contains(end, true) // false
找出您的moment是否在日期范围内
var start = new Date(2012, 4, 1); var end = new Date(2012, 4, 23); var when = moment("2012-05-10", "YYYY-MM-DD"); var range = moment.range(start, end); when.within(range); // true
它与另一个范围重叠吗?
range.overlaps(range2); // true
交叉范围是什么?
range.intersect(range2); // [moment.range(lol, end)]
添加/组合/合并重叠的范围。
range.add(range2); // [moment.range(start, wat)] var range3 = moment.range(new Date(2012, 3, 1), new Date(2012, 3, 15); range.add(range3); // [null]
从一个范围减去另一个范围。
range.subtract(range2); // [moment.range(start, lol)]
迭代
通过时间量或另一个范围迭代您的日期范围
var start = new Date(2012, 2, 1); var two = new Date(2012, 2, 2); var end = new Date(2012, 2, 5); var range1 = moment.range(start, end); var range2 = moment.range(start, two); // One day var acc = []; range1.by('days', function(moment) { // Do something with `moment` });
可以使用moment.js的任何接受单位add
方法。
您还可以通过另一个范围进行迭代
range1.by(range2, function(moment) { // Do something with `moment` acc.push(moment); }); acc.length == 5 // true
迭代还支持通过将最后一个参数设置为true
来排除范围的末尾值。
var acc = []; range1.by('d', function (moment) { acc.push(moment) }, true); acc.length == 4 // true
比较
比较范围长度或用简单的数学将它们相加
var r_1 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15)); var r_2 = moment.range(new Date(1995, 0, 1), new Date(1995, 12, 25)); r_2 > r_1 // true r_1 + r_2 // duration of both ranges in milliseconds Math.abs(r_1 - r_2); // difference of ranges in milliseconds
相等
检查两个范围是否相同,即它们的开始和结束相同
var r_1 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15)); var r_2 = moment.range(new Date(2011, 2, 5), new Date(2011, 3, 15)); var r_3 = moment.range(new Date(2011, 3, 5), new Date(2011, 6, 15)); r_1.isSame(r_2); // true r_2.isSame(r_3); // false
差异
根据不同单位提供的整个范围的差异。
可以使用moment.js的任何接受单位add
方法。
var start = new Date(2011, 2, 5); var end = new Date(2011, 5, 5); var dr = moment.range(start, end); dr.diff('months'); // 3 dr.diff('days'); // 92 dr.diff(); // 7945200000
转换
toArray
将DateRange
转换为Date
对象的Array
。
var start = new Date(2011, 2, 5); var end = new Date(2011, 5, 5); var dr = moment.range(start, end); dr.toArray('days'); // [new Date(2011, 2, 5), new Date(2011, 3, 5), new Date(2011, 4, 5), new Date(2011, 5, 5)]
toDate
将DateRange
转换为开始和结束Date
对象的Array
。
var start = new Date(2011, 2, 5); var end = new Date(2011, 5, 5); var dr = moment.range(start, end); dr.toDate(); // [new Date(2011, 2, 5), new Date(2011, 5, 5)]
toString
将DateRange
转换为String
将格式化为ISO 8601时间间隔。
var start = '2015-01-17T09:50:04+00:00'; var end = '2015-04-17T08:29:55+00:00'; var range = moment.range(moment.utc(start), moment.utc(end)); range.toString() // "2015-01-17T09:50:04+00:00/2015-04-17T08:29:55+00:00"
valueOf
结束日期和开始日期之间的毫秒数差异。
var start = new Date(2011, 2, 5); var end = new Date(2011, 5, 5); var range = moment.range(start, end); range.valueOf(); // 7945200000
中心
计算范围的中心
var start = new Date(2011, 2, 5); var end = new Date(2011, 3, 5); var dr = moment.range(start, end); dr.center(); // 1300622400000
克隆
深度克隆一个范围
var start = new Date(2011, 2, 5); var end = new Date(2011, 3, 5); var dr = moment.range(start, end); var dr2 = dr.clone(); dr2.start.add(2, 'days'); dr2.start.toDate() === dr.start.toDate() // false
安装
moment-range可以在浏览器和node.js中运行。
Node / NPM
通过npm安装
npm install moment-range
然后使用require
它
var moment = require('moment'); require('moment-range');
浏览器
只需在moment.js之后包含moment-range即可
<script src="moment.js"></script> <script src="moment-range.js"></script>
感谢cdnjs的出色人员,您可以从cdnjs服务器链接到moment-range。
Bower
bower install moment-range
注意:在moment
之后包含moment-range
。
运行测试
克隆这个家伙
git clone https://git@github.com/gf3/moment-range.git
安装依赖项
npm install
做所有的事情!
npm run-script build
npm run-script test
npm run-script jsdoc
许可证
moment-range是UNLICENSED。