Open
Description
function numberOfRounds(loginTime: string, logoutTime: string): number {
//在 HH:00、HH:15、HH:30 和 HH:45 ,将会开始一个新的对局
const [loginTimeHour, loginTimeMinute] = loginTime.split(':').map(Number);
const [logoutTimeHour, logoutTimeMinute] = logoutTime.split(':').map(Number);
// 统一转成分钟
const loginStartMinute = loginTimeHour * 60 + loginTimeMinute;
let logoutEndMinute = logoutTimeHour * 60 + logoutTimeMinute;
// 特殊场景, finishTime 早于 startTime
if (logoutEndMinute < loginStartMinute) {
logoutEndMinute += 24 * 60;
}
// 分析
// 13分钟....67分钟, 这个时间段中, 存在3个满足要求的对局: 15->30->45->60
// 接着分析首尾的时间
// 首: 13/15 向上取整是1 向下取整是0
// 尾: 67/15 向上取整是5 向下取整是4
// 如何对上我们的结果3呢, 就是要取:尾向下取整(4)-首向上取整(1) === 3
// 特殊场景: 47...57 (区间差值小于15)
// 首: 47/15 向上取整是4 向下取整是3
// 尾: 57/15 向上取整是4 向下取整是3
// 如果按照 3-4 === -1, 结果就不对,应该是0
// 于是需要特殊处理
const res = Math.floor(logoutEndMinute / 15) - Math.ceil(loginStartMinute / 15);
return res === -1 ? 0 : res;
};