获取从日期范围moment.js
假设相同的时间间隔, 我有日期范围:获取从日期范围moment.js
var start = moment('2017-08-21').startOf('isoweek').startOf('day');
var end = moment('2017-08-21').startOf('isoweek').add('days', 4).endOf('day');
我有另一个数组:
var array = [
{x:Mon Aug 21 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 21 2017 08:05:00 GMT+0200 (Central European Daylight Time),y:6},
...
{x:Mon Aug 22 2017 07:05:00 GMT+0200 (Central European Daylight Time),y:4},
{x:Mon Aug 22 2017 08:05:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 22 2017 15:05:00 GMT+0200 (Central European Daylight Time),y:9},
{x:Mon Aug 22 2017 22:05:00 GMT+0200 (Central European Daylight Time),y:1},
...
{x:Mon Aug 23 2017 06:05:00 GMT+0200 (Central European Daylight Time),y:5},
{x:Mon Aug 23 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 23 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:3},
...
{x:Mon Aug 25 2017 07:05:00 GMT+0200 (Central European Daylight Time),y:4},
{x:Mon Aug 25 2017 12:05:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 25 2017 15:05:00 GMT+0200 (Central European Daylight Time),y:8},
{x:Mon Aug 25 2017 19:05:00 GMT+0200 (Central European Daylight Time),y:7},
{x:Mon Aug 25 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:3},
...
{x:Mon Aug 27 2017 06:05:00 GMT+0200 (Central European Daylight Time),y:5},
{x:Mon Aug 27 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 27 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:3},
...
];
我在这里需要做的是改变的y = 0的值,如果时间不是之间范围:
'08:05:00' 到22时05分○○秒
意味着我的输出必须是这样的:
var array = [
{x:Mon Aug 21 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 21 2017 08:05:00 GMT+0200 (Central European Daylight Time),y:6},
...
{x:Mon Aug 22 2017 07:05:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 22 2017 08:05:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 22 2017 15:05:00 GMT+0200 (Central European Daylight Time),y:9},
{x:Mon Aug 22 2017 22:05:00 GMT+0200 (Central European Daylight Time),y:1},
...
{x:Mon Aug 23 2017 06:05:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 23 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 23 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:0},
...
{x:Mon Aug 25 2017 07:05:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 25 2017 12:05:00 GMT+0200 (Central European Daylight Time),y:3},
{x:Mon Aug 25 2017 15:05:00 GMT+0200 (Central European Daylight Time),y:8},
{x:Mon Aug 25 2017 19:05:00 GMT+0200 (Central European Daylight Time),y:7},
{x:Mon Aug 25 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:0},
...
{x:Mon Aug 27 2017 06:05:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 27 2017 08:00:00 GMT+0200 (Central European Daylight Time),y:0},
{x:Mon Aug 27 2017 23:05:00 GMT+0200 (Central European Daylight Time),y:0},
...
];
我已经试过到目前为止
$.each(arr, function (key, value) {
var date = moment(value.x);
//if (date < start || date > end])) {
//@TODO where i need to check time interval also
filterArray.push({
x: date,
y: 0
})
} else {
filterArray.push({
x: date,
y: value.y
})
}
});
我试着看到了日期范围,但没有运气的时间间隔。任何人都可以提供给我建议或帮助吗?
我假定您的x
属性是JavaScript日期对象,并且var date = moment(value.x);
您正在调用moment(Date);
。
您可以使用isBetween
说:
检查了一下是其他两个时刻之间,可选地看着单位比例(分钟,小时,天,等)。这场比赛是独家。
在你的情况,你可以通过'[]'
作为第四参数,使isBetween
包容性。
您可以简单地使用date.isBetween(start, end, null, '[]')
来检查元素是否在start
和end
之间的范围内。
然后你可以使用isBetween
来检查,如果你的元素的时间是08:05:00
和22:05:00
建设3一刻对象的同一天(今天在我的例子之间,因为略单位默认为0或当前日期,月和年如moment({unit: value, ...});
文档中所述)。所以,你将有:
-
today805
代表当天在08:05:00
-
today2205
代表当天在22:05:00
-
time
这是一个时刻对象当天与x
属性的时间($.each
循环的当前元素)
因此,您可以使用time.isBetween(today805, today2205, null, '[]')
来检查元素的tim e介于08:05:00
和22:05:00
之间。这将比较“仅”时间,因为三个时刻代表同一天通过建设。
你可以同时使用片刻的吸气剂(hours()
和minutes()
)和原生日期干将(getHours()
和getMinutes()
)
这里工作示例的array
元素的x
性质的小时和分钟:
var start = moment('2017-08-21').startOf('isoweek').startOf('day');
var end = moment('2017-08-21').startOf('isoweek').add(4, 'days').endOf('day');
var array = [
{x: new Date(2017, 7, 21, 8, 0), y:3},
{x: new Date(2017, 7, 21, 8, 5), y:6},
//...
{x: new Date(2017, 7, 22, 7, 5), y:4},
{x: new Date(2017, 7, 22, 8, 5), y:3},
{x: new Date(2017, 7, 22, 15, 5),y:9},
{x: new Date(2017, 7, 22, 22, 5),y:1},
//...
//...
//...
{x: new Date(2017, 7, 27, 6, 5), y:5},
{x: new Date(2017, 7, 27, 8, 0), y:3},
{x: new Date(2017, 7, 27, 23, 5),y:3},
//...
];
var filterArray = [];
// Today at 08:05:00
var today805 = moment({h: 8, m: 5});
// Today at 22:05:00
var today2205 = moment({h: 22, m: 5});
$.each(array, function (key, value) {
var date = moment(value.x);
// Create a moment object for the current day with hours and minutes of value.x
var time = moment({h: date.hours(), m: date.minutes()});
var yVal;
if(date.isBetween(start, end, null, '[]') &&
time.isBetween(today805, today2205, null, '[]')) {
yVal = 0;
} else {
yVal = value.y;
}
filterArray.push({
x: date.format(),
y: yVal
});
});
console.log(filterArray);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
你说'之间:08:05:00〜10:05:00',但你的EXA mple似乎暗示了'':08:05:00'到22:05:00'之间' – phuzi
@phuzi yap你是对的,我道歉 – Dev