2016-01-28 63 views
2

我有两个日期开始和结束休息时间到30分钟块

"start" : "Wed Jan 27 2016 21:00:00 GMT-0500", 
"end" : "Thu Jan 27 2016 23:30:00 GMT-0500" 

我想这个时间分成块一样遵循

"start" : "Wed Jan 27 2016 21:00:00 GMT-0500", 
"end" : "Thu Jan 27 2016 21:30:00 GMT-0500" 
---------------------------------------------- 
"start" : "Wed Jan 27 2016 21:30:00 GMT-0500", 
"end" : "Thu Jan 27 2016 22:00:00 GMT-0500" 
---------------------------------------------- 
"start" : "Wed Jan 27 2016 22:00:00 GMT-0500", 
"end" : "Thu Jan 27 2016 22:30:00 GMT-0500" 
---------------------------------------------- 
"start" : "Wed Jan 27 2016 22:30:00 GMT-0500", 
"end" : "Thu Jan 27 2016 23:00:00 GMT-0500" 
---------------------------------------------- 
"start" : "Wed Jan 27 2016 23:00:00 GMT-0500", 
"end" : "Thu Jan 27 2016 23:30:00 GMT-0500" 

反正有做到这一点使用moment.js或JavaScript?

+0

好吧,不是完全不知道时区,因为在区间中间可能会有时间偏移变化。 –

+0

@JoachimIsaksson,我知道日期来自哪里的时区,假设它是'America/New_Your',如果我知道时区,有什么办法可以做到这一点吗? – Sasikanth

+0

@JoachimIsaksson和我也有时刻添加时区库 – Sasikanth

回答

2

使用力矩时区(假设你added the timezone),这将把你的时间间隔写到console.log;

var start = moment.tz('2016-01-27 21:00', 'America/New_York'); 
var end = moment.tz('2016-01-27 23:30', 'America/New_York'); 

while(start < end) { 
    console.log('Start: ' + start.format()); 
    start = start.add(30, 'minutes') 
    console.log('End: ' + start.format()); 
    console.log(); 
} 

Start: 2016-01-27T21:00:00-05:00 
End: 2016-01-27T21:30:00-05:00 

Start: 2016-01-27T21:30:00-05:00 
End: 2016-01-27T22:00:00-05:00 

Start: 2016-01-27T22:00:00-05:00 
End: 2016-01-27T22:30:00-05:00 

Start: 2016-01-27T22:30:00-05:00 
End: 2016-01-27T23:00:00-05:00 

Start: 2016-01-27T23:00:00-05:00 
End: 2016-01-27T23:30:00-05:00 
+0

如果我用UTC节省时间,那么我不需要做任何这些转换吗? – Sasikanth

1
var startTime = new Date(start).getTime(); 
var endTime = new Date(end).getTime(); 

var duration = 1000 * 60 * 30; 
var times = [] ; 
var arr_len = (startTime - endTime)/duration; 

for(i=0; i< arr_len; i++){ 
    times.push(new Date(startTime + duration)); 
} 

然后你得到这些块

+0

感谢您的答案,但在这里的开始和结束时间不是静态的,所以我们如何找到块的数量呢? – Sasikanth

+0

@Sasikanth你是什么意思开始和结束时间不是静态的?我附加了一个图像,我在控制台中运行这些代码。 – jilykate

+0

我的意思是,我们如何才能决定数字'5',如果我从'凌晨1点到凌晨5点'有时间,那么我将只能得到前30分钟的5次数,但在这种情况下,我需要8次船只 – Sasikanth

2

我们可以将时间分割成块这样的:

var time = { 
 
    "start": "Wed Jan 27 2016 21:00:00 GMT-0500", 
 
    "end": "Thu Jan 27 2016 23:30:00 GMT-0500" 
 
}; 
 

 

 
var startTime = new Date(time.start).getTime(); 
 
var endTime = new Date(time.end).getTime(); 
 

 
var diff = endTime - startTime; 
 

 
var chunks = []; 
 
var hold = startTime; 
 
var threshold = (60 * 30 * 1000); //30minutes 
 
for (var i = (startTime + threshold); i <= endTime; i += (threshold)) { 
 
    var newEndTime = new Date(i); 
 
    chunks.push({ 
 
    start: new Date(hold), 
 
    end: newEndTime 
 
    }); 
 
    hold = newEndTime; 
 
} 
 
console.log(chunks)

相关问题