将utc时间以15分钟为单位格式化。

比如
时间是15点55分,那么显示的就是16点00分。
时间是16点08分,那么显示的就是16点15分。
时间是16点19分,那么显示的就是16点30分。

// =======================分割线=================
下面是我采用的方式,能达到需求,但是感觉写的很繁琐,虚心请教更简便的写法~

function formatBeginTime(beginTime){
    let time = new Date(beginTime);
    let minute = time.getMinutes();
    if (minute > 0 && minute <= 15) {
        time.setMinutes(15);
    }
    if (minute > 15 && minute <= 30) {
        time.setMinutes(30);
    }
    if (minute > 30 && minute <= 45) {
        time.setMinutes(45);
    }
    if (minute > 45) {
        time.setMinutes(0);
        time.setHours(time.getHours()+1);
    }
    return time.getTime();
}
阅读 2.1k
2 个回答
let now = new Date()
let step = 15 * 60 * 1000 //十五分钟
let mod = now.getTime() % step //当前距离距离上一个15分钟过了多久
now.setTime(now.getTime()-mod+step)
console.log(now)

需求是向上的话,if判断删除,直接执行true的操作就行了.
这么操作的好处是,可以不用考虑跨天,跨月,跨年的时候比较复杂的逻辑,通过时间戳来操作,获取的直接就是一个时间对象,再转换成自己想要的格式就可以了.


修改了一下代码匹配需求.
我们把关注的点定在15分钟一个轮回上,通过取余数实现
utc时间戳的起点是1970/1/1 00:00:00
所以每过15分钟就会增加900秒,js时间戳增加15*60*1000
实际上我们是在寻找距离当前时间戳最近的,下一个能被15*60*1000的数.
减掉除不尽的部分,再加上15*60*100就完事儿了.

把分钟取出来,%15%15 + 15看离谁最近

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题