js时间以10分钟向上取整

时间 2020-10-10 11:01 变为 2020-10-10 11:10
时间 2020-10-10 11:59 变为 2020-10-10 12:00

让时间分钟不满10分钟 以10分钟向上取整

阅读 6.5k
3 个回答
demo('2020-10-10 11:01') // => 2020-10-10 11:10
demo('2020-10-10 11:20') // => 2020-10-10 11:20
demo('2020-10-10 11:59') // => 2020-10-10 12:00
demo('2020-12-31 23:50') // => 2020-12-31 23:50
demo('2020-12-31 23:59') // => 2021-01-01 00:00


function demo (timeStr) {
  timeStr = timeStr.replace(/-/g, '/')
  var oDate = new Date(timeStr)
  var stamp = oDate.getTime()
  var minute = oDate.getMinutes()
  var last = minute%10
  if(last) {
    stamp += (10-last) * 60 * 1000
  }
  oDate = new Date(stamp)

  var t = {
    year: pad_2_0(oDate.getFullYear()),
    month: pad_2_0(oDate.getMonth() + 1),
    day: pad_2_0(oDate.getDate()),
    hour: pad_2_0(oDate.getHours()),
    minute: pad_2_0(oDate.getMinutes()),
    second: pad_2_0(oDate.getSeconds())
  }

  var  res = t.year + '-' + t.month + '-' + t.day + ' ' + t.hour + ':' + t.minute;

  console.log(timeStr, '=>', res)
  return res;
}

function pad_2_0 (num) {
  return num >= 10 ? num : '0' + num
}

其实你可以这样想, 你的目的是吧最后一位变成0:
2020-10-10 11:1x (最后的分钟是x) 也就是这x必须是0, 那么你可以试试每次获得当前毫秒然后 加1分钟然后再取的对应的分钟, 直到x为0了就输出这个时间.

let step = 10 * 60 * 1000
let date = new Date('2020-10-10 11:01')
date = new Date(Math.ceil(date / step) * step)
//Sat Oct 10 2020 11:10:00 GMT+0800 (中国标准时间)
//然后再把date转换成你要的格式
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题