要求
检查会议时间是否在工作时间范围内,并且需要考虑会议持续时间不能超过下班时间。
const dayStart = "07:30";
const dayEnd = "17:45";
function scheduleMeeting(startTime,durationMinutes) {
// ..TODO..
}
scheduleMeeting("7:00",15); // false
scheduleMeeting("07:15",30); // false
scheduleMeeting("7:30",30); // true
scheduleMeeting("11:30",60); // true
scheduleMeeting("17:00",45); // true
scheduleMeeting("17:30",30); // false
scheduleMeeting("18:00",15); // false
实现思路
-
时间字符串转换为分钟数:
- 将"HH:MM"格式的时间转换为从午夜开始的分钟总数
- 这样"07:30"会变成 7×60+30=450 分钟
- 这种转换方法可以轻松处理有无前导零的情况
-
计算会议的开始和结束时间:
- 会议开始时间就是输入的startTime转换后的分钟数
- 会议结束时间是开始时间加上持续时间(durationMinutes)
-
检查会议时间是否在工作时间范围内:
- 会议开始时间不早于dayStart(07:30)
- 会议结束时间不晚于dayEnd(17:45)
实现代码
const dayStart = '07:30';
const dayEnd = '17:45';
const dayStartMinutes = getMinutesSinceMidnight(dayStart)
const dayEndMinutes = getMinutesSinceMidnight(dayEnd)
function scheduleMeeting(startTime, durationMinutes) {
const startTimeMinutes = getMinutesSinceMidnight(startTime)
const endTimeMinutes = startTimeMinutes + durationMinutes;
return startTimeMinutes >= dayStartMinutes && endTimeMinutes <= dayEndMinutes;
}
function getMinutesSinceMidnight(timeStr) {
const [hours, minutes] = timeStr.split(':');
return parseInt(hours, 10) * 60 + parseInt(minutes, 10);
}
console.log(scheduleMeeting('7:00', 15)); // false
console.log(scheduleMeeting('07:15', 30)); // false
console.log(scheduleMeeting('7:30', 30)); // true
console.log(scheduleMeeting('11:30', 60)); // true
console.log(scheduleMeeting('17:00', 45)); // true
console.log(scheduleMeeting('17:30', 30)); // false
console.log(scheduleMeeting('18:00', 15)); // false