我通过API收到两个日期。我需要根据时间间隔建立一个可用小时数数组。
我收到的两次都是mm/dd/yyy h:mm:ss a
格式,并且都将它们转换为h:mm a
(在渲染要填充的选择字段时,实际上可以做到这一点)。
到目前为止,我的代码:
let start = moment(location.availableFrom, "MM-DD-YYYY h:mm:ss a");
let end = moment(location.availableTill, 'MM-DD-YYYY h:mm:ss a');
if(start.format('mm') < 30) {
start = start.format('h:30 a');
} else {
start = start.add(1, 'h').format('h:00 a');
}
if(end.format('mm') > 30) {
end = end.format('h:30 a');
} else {
end = end.format('h:00 a');
}
是的,我知道那很烂。我需要将它们四舍五入为最早的30到30分钟,因此,如果我下午8:02,则需要在晚上8:00进行。无论如何,正如我所说,渲染选择字段时可以执行此操作。
问题是:如何用所有可用时间填充数组?又名如何创建一个30到30分钟间隔的数组。
任何帮助表示赞赏!
最佳答案
尝试这个,
// Code goes here
window.onload = function(){
var start = moment('08-02-2013 08:02 pm', "MM-DD-YYYY h:mm:ss a");
var end = moment('08-02-2013 10:21 am', 'MM-DD-YYYY h:mm:ss a');
console.log('start time:'+start.format('hh:mm a')+',end time:'+end.format('hh:mm a'));
var arr = [];
var firstItem = (start.minutes()<=30)?(30-start.minutes()):(60-start.minutes());
var f1 = start.add(firstItem,'minutes');
arr.push(f1.format('hh:mm a'));
for(var i=0;i<48;i++){
if((f1.format('hh'))==(end.format('hh'))&& ((f1.format('a'))==(end.format('a')))){
//arr.pop();
break;
}
else{
f1 = f1.add('30','minutes');
arr.push(f1.format('hh:mm a'));
}
}
console.log(arr);
}
<head>
<script data-require="moment.js@*" data-semver="2.14.1" src="https://npmcdn.com/moment@2.14.1"></script>
<link href="style.css" rel="stylesheet" />
<script src="script.js"></script>
</head>
<body>
<h1>Time array</h1>
</body>
测试一下,请让我知道您需要进行的任何更改或发现的任何问题。