intelogie/moment-range

此软件包的最新版本(dev-master)没有可用的许可证信息。

安装: 135

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 203

语言:JavaScript

dev-master 2016-12-08 18:04 UTC

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