【问题标题】:Convert string to time and add 2 hours in JS将字符串转换为时间并在JS中添加2小时
【发布时间】:2021-09-10 23:40:47
【问题描述】:

我从外部 JSON 获得这个时间:

"time":"19:45"
我需要从这个字符串中添加 2 小时。
JS可以吗? 谢谢

【问题讨论】:

  • 这可以用任何语言吗?如果没有日期的一部分,时间就不存在,如果您的意思是这是今天的时间,那么这将是有道理的。
  • 确定是@vaira,每天都有 7 点钟,2 小时后是 9 点
  • 23:01 呢?它会变成01:01?
  • 是 "time":"09:24" 还是 "time:":"9:14"?您是否有前导零?
  • @pilchard 问题是“将字符串转换为时间并在 JS 中添加 2 小时”,我不认为他只是要求进行刺痛操作

标签: javascript datetime momentjs html-framework-7


【解决方案1】:

试试这个

let myTime = '19:45'

function getTime(time, addHour) {
  let [h, m] = time.split(':');
  let date = new Date();
   date.setHours(h, m, 0)
   date.toString();
  let res = `${date.getHours()+addHour}:${date.getMinutes()}`
  return res
}
 
console.log(getTime( myTime, 2 ))

【讨论】:

  • 你在 Date 对象之外添加,所以它不会在午夜切换
【解决方案2】:

使用String.split得到hourNumminuteNum,然后构造一个Date对象并使用setTime增加两个小时。

function addHours(text, hours=2) {
  const [hourNum, minNum] = text.split(':')
  const time = new Date(0, 0, 0, hourNum, minNum)
  time.setTime(time.getTime() + (hours * 60 * 60 * 1000))
  return `${time.getHours()}:${time.getMinutes()}`
}

console.log(addHours('19:45', 2))
console.log(addHours('23:45', 2))

【讨论】:

  • 这可能无法更改偏移量,new Date(0,0,0) 实际上为 1899-12-31 创建了一个日期,在此期间,许多地方都更改了它们的偏移量,因此增量可能会将时间从一个偏移量推到另一个偏移量,导致结果时间出乎意料。考虑改用 UTC。 :-) 为什么将 0 年视为 1900 年?它当然是一个 ECMASCript Date 对象! 0 到 99 年被视为 1900 到 1999 年。
【解决方案3】:

Date 对象不是计算时间所必需的,它只是意味着考虑分钟和秒 (60) 甚至可能是天 (24)。

例如

// Add time to a timestamp, both in in HH:mm format
// If respectDay is true, hours are % 24
function addTime(start, increment, respectDay = false) {
  let pad = n => ('0' + n).slice(-2);
  let timeToMins = time => time.split(':').reduce((h, m) => h*60 + m*1);
  let minsToTime = (mins, respectDay = false) => `${pad((mins / 60 | 0) % (respectDay? 24 : Number.POSITIVE_INFINITY))}:${pad(mins%60)}`;
  return minsToTime(timeToMins(start) + timeToMins(increment), respectDay);
}

let time = "19:45";
console.log(addTime(time, '8:23'));       // Total time  : 28:08
console.log(addTime(time, '8:23', true)); // As day time : 04:08

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多