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;
}

猜你喜欢

转载自blog.csdn.net/m0_46613429/article/details/139445413