我通过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>





测试一下,请让我知道您需要进行的任何更改或发现的任何问题。

09-12 01:10
查看更多