获取从日期范围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 
     }) 
     } 
    }); 

我试着看到了日期范围,但没有运气的时间间隔。任何人都可以提供给我建议或帮助吗?

+0

你说'之间:08:05:00〜10:05:00',但你的EXA mple似乎暗示了'':08:05:00'到22:05:00'之间' – phuzi

+0

@phuzi yap你是对的,我道歉 – Dev

我假定您的x属性是JavaScript日期对象,并且var date = moment(value.x);您正在调用moment(Date);

您可以使用isBetween说:

检查了一下是其他两个时刻之间,可选地看着单位比例(分钟,小时,天,等)。这场比赛是独家。

在你的情况,你可以通过'[]'作为第四参数,使isBetween包容性。

您可以简单地使用date.isBetween(start, end, null, '[]')来检查元素是否在startend之间的范围内。

然后你可以使用isBetween来检查,如果你的元素的时间是08:05:0022: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:0022: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>