【问题标题】:Adding 30 minutes interval between two times两次之间增加 30 分钟的间隔
【发布时间】:2018-05-14 22:50:18
【问题描述】:

我有根据铁路时间的往返时间,现在我转换为正常时间上午到下午。但在那之后我需要添加 30 分钟的间隔。我对迭代器方法有点困惑。请帮助提前谢谢

我的代码

let fromtime = '09:00:00'

let totime = '21:00:00'

let getGenTime = (timeString) => {
      let H = +timeString.substr(0, 2);
      let h = (H % 12) || 12;
      let ampm = H < 12 ? " AM" : " PM";
      return timeString = h + timeString.substr(2, 3) + ampm;
}

现在我有 am 和 pm 格式的 from 和 to 时间,但我需要在 from 和 to 时间之间添加 30 分钟间隔

  fromtime = getGenTime(fromtime) // 09:00 AM

  totime =  getGenTime(totime)   //  09:00 PM

控制台中的预期结果:

 09:00 AM
 09:30 AM
 10:00 AM
 10:30 AM
 11:00 AM
 ....
 .....
 08:30 PM
 09:00 PM

【问题讨论】:

  • 你为什么不直接使用Date对象?
  • moment.js 库应该有助于格式化时间。
  • @Barmar 实际上我从数据库中获取数据并从数据库中获取数据,所以我认为可以通过循环添加 30 分钟。也因为我是 JavaScript 新手
  • 请不要写晦涩的代码。将来您或任何维护此代码的人都不会对此感到满意。如果您按日期操作,请使用Date。查看创建日期范围的示例:stackoverflow.com/questions/4345045/…

标签: javascript arrays string loops date


【解决方案1】:

如果你使用Date 对象而不是strings 会更好,或者使用moment.js 提供许多有用的方法。

但无论如何,它只需要一个带有一些检查的循环来实现你想要的,我创建了一个函数,它将返回一个在你的 fromtimetotime 之间的所有时间的数组:

function returnTimesInBetween(start, end) {
  var timesInBetween = [];
  var startH = parseInt(start.split(":")[0]);
  var startM = parseInt(start.split(":")[1]);
  var endH = parseInt(end.split(":")[0]);
  var endM = parseInt(end.split(":")[1]);

  if (startM == 30)
    startH++;
  for (var i = startH; i < endH; i++) {
    timesInBetween.push(i < 10 ? "0" + i + ":00" : i + ":00");
    timesInBetween.push(i < 10 ? "0" + i + ":30" : i + ":30");
  }
  timesInBetween.push(endH + ":00");
  if (endM == 30)
    timesInBetween.push(endH + ":30")

  return timesInBetween.map(getGenTime);
}

演示:

let fromtime = '09:00:00'

let totime = '21:00:00'

let getGenTime = (timeString) => {
  let H = +timeString.substr(0, 2);
  let h = (H % 12) || 12;
  let ampm = H < 12 ? " AM" : " PM";
  return timeString = h + timeString.substr(2, 3) + ampm;
}



function returnTimesInBetween(start, end) {
  var timesInBetween = [];

  var startH = parseInt(start.split(":")[0]);
  var startM = parseInt(start.split(":")[1]);
  var endH = parseInt(end.split(":")[0]);
  var endM = parseInt(end.split(":")[1]);

  if (startM == 30)
    startH++;

  for (var i = startH; i < endH; i++) {
    timesInBetween.push(i < 10 ? "0" + i + ":00" : i + ":00");
    timesInBetween.push(i < 10 ? "0" + i + ":30" : i + ":30");
  }

  timesInBetween.push(endH + ":00");
  if (endM == 30)
    timesInBetween.push(endH + ":30")

  return timesInBetween.map(getGenTime);
}

console.log(returnTimesInBetween(fromtime, totime));

编辑:

要从fromtimetotime 字符串中获取Date 对象,您可以使用Date 构造函数:

let fromtime = '09:00:00';
var d = new Date(Date.UTC(2017, 10, 10, parseInt(fromtime.split(":")[0]), parseInt(fromtime.split(":")[1])));

请注意区域设置和时区,您可能会在结果中发现几个小时的差异。

演示:

let fromtime = '09:00:00'

let totime = '21:00:00'

let getGenTime = (timeString) => {
  let H = +timeString.substr(0, 2);
  let h = (H % 12) || 12;
  let ampm = H < 12 ? " AM" : " PM";
  return timeString = h + timeString.substr(2, 3) + ampm;
}



function returnTimesInBetween(start, end) {
  var timesInBetween = [];

  var startH = parseInt(start.split(":")[0]);
  var startM = parseInt(start.split(":")[1]);
  var endH = parseInt(end.split(":")[0]);
  var endM = parseInt(end.split(":")[1]);

  if (startM == 30)
    startH++;

  for (var i = startH; i < endH; i++) {
    timesInBetween.push(i < 10 ? "0" + i + ":00" : i + ":00");
    timesInBetween.push(i < 10 ? "0" + i + ":30" : i + ":30");
  }

  timesInBetween.push(endH + ":00");
  if (endM == 30)
    timesInBetween.push(endH + ":30")

  timesInBetween.map(getGenTime);
  return timesInBetween.map(time => new Date(Date.UTC(2017, 10, 10, parseInt(time.split(":")[0]), parseInt(time.split(":")[1]))));
}

console.log(returnTimesInBetween(fromtime, totime));

【讨论】:

  • 是的,使用日期更好,因为我需要验证以前的时间是否应该禁用..你能告诉我如何根据日期或时刻转换上述代码
  • @NarayananS 是的,当然,我正在编辑答案:)
  • 如果可能的话,你能根据日期对象做结果吗..请帮助我有点困惑
  • 我编辑了答案,希望Demo现在能帮助你理解。
  • @NarayananS 那么现在这有意义吗?如果答案对您有帮助,请接受/投票。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-07-06
  • 2017-03-17
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多