js时间换算

1、根据HH::mm:ss以及提前或延迟的分钟数得出具体时间及偏移量

timeString格式为HH:mm:ssminutesOffset有正负,正代表延后,负代表提前;返回值中dayOffset表示偏移量,0表示当天,1表示次日,-1表示前一天

function adjustTime (timeString, minutesOffset) {
  // 解析时间字符串
  console.log(timeString);
  let parts = timeString.split(":");
  let hours = parseInt(parts[0]);
  let minutes = parseInt(parts[1]);
  // 添加分钟偏移量
  minutes += minutesOffset;
  // 计算小时和分钟的调整值
  let hourAdjustment = Math.floor(minutes / 60);
  let minuteAdjustment = minutes % 60;
  // 处理负数分钟偏移
  if (minutes < 0) {
    minuteAdjustment += 60;
  }
  // 处理跨天情况
  let dayOffset = Math.floor((hours + hourAdjustment) / 24);
  // 计算调整后的小时和分钟
  hours = (hours + hourAdjustment + 24) % 24;
  minutes = (minutes + 1440) % 60; // 1440 分钟等于一天
  // 格式化小时和分钟
  let adjustedHours = (hours < 10 ? "0" : "") + hours;
  let adjustedMinutes = (minutes < 10 ? "0" : "") + minutes;
  // 构造调整后的时间字符串
  let adjustedTime = adjustedHours + ":" + adjustedMinutes; // + ":" + parts[2]
  // 返回调整后的时间字符串及跨天数
  return { time: adjustedTime, dayOffset: dayOffset };
}

// adjustTime("09:00:00", -45) 返回 { time: '08:15:00', dayOffset: 0 }
// adjustTime("09:00:00", -600) 返回 { time: '23:00:00', dayOffset: -1 }
// adjustTime("18:00:00", 45) 返回 { time: '18:45:00', dayOffset: 0 }
// adjustTime("18:00:00", 400) 返回 { time: '00:40:00', dayOffset: 1 }

2、根据HH::mm:ss以及偏移量得出从0点到特定时间的秒数

timeString格式为HH:mm:ssdayOffset表示偏移量,0表示当天,1表示次日,-1表示前一天,返回值如果为负数表示前一天,大于86400表示次日

function timeToSeconds (timeString, dayOffset) {
  // 解析时间字符串
  let parts = timeString.split(":");
  let hours = parseInt(parts[0]);
  let minutes = parseInt(parts[1]);
  let seconds = parts[2] ? parseInt(parts[2]) : 0;
  // 计算总秒数
  let totalSeconds = hours * 3600 + minutes * 60 + seconds;
  // 考虑跨天情况的偏移量
  totalSeconds += dayOffset * 24 * 3600;
  return totalSeconds;
}

// timeToSeconds("08:00:00", 0) 返回 28800
// timeToSeconds("23:30:00", -1) 返回 -1800
// timeToSeconds("01:00:00", 1) 返回 90000

3、根据从0点到特定时间的秒数得出具体的时间跟偏移量

function secondsToTime (totalSeconds) {
  let dayOffset = 0;
  // 如果是负数,将秒数转换为正数,并调整 dayOffset
  if (totalSeconds < 0) {
    totalSeconds += 86400; // 一天的秒数
    dayOffset = -1;
  } else if (totalSeconds >= 86400) {
    totalSeconds -= 86400; // 一天的秒数
    dayOffset = 1;
  }
  // 计算总的分钟数和秒数
  let totalMinutes = Math.floor(totalSeconds / 60);
  let totalSecondsRemain = totalSeconds % 60;
  // 计算总的小时数和分钟数
  let totalHours = Math.floor(totalMinutes / 60);
  let totalMinutesRemain = totalMinutes % 60;
  // 格式化为 HH:mm:ss 格式的字符串
  let timeString = `${formatTime(totalHours)}:${formatTime(totalMinutesRemain)}`; // :${formatTime(totalSecondsRemain)}
  return { time: timeString, dayOffset: dayOffset };
}

// secondsToTime(32400) 返回 { time: '09:00:00', dayOffset: 0 }
// secondsToTime(-1800) 返回 { time: '23:30:00', dayOffset: -1 }
// secondsToTime(88200) 返回 { time: '00:30:00', dayOffset: 1 }

4、计算两个时间HH:mm:ss 相差的分钟数

function calculateTimeDifference (time1, time2) {
  // 将时间字符串转换为秒数
  const time1Seconds = convertToSeconds(time1);
  const time2Seconds = convertToSeconds(time2);
  // 计算时间差
  const timeDifferenceSeconds = Math.abs(time1Seconds - time2Seconds);
  // 转换为分钟数
  const minutesDifference = Math.floor(timeDifferenceSeconds / 60);
  return minutesDifference;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值