📅  最后修改于: 2023-12-03 15:11:21.060000             🧑  作者: Mango
在Hackerrank的问题“电影中美好的一天”中,给定一个24小时的时间,以“HH:MM:SS AM/PM”的格式表示。问题要求我们在这样的一天中找到最早和最晚的时间,并将它们转换为24小时制。
我们可以将给定的时间字符串拆分为小时,分钟,秒和上午/下午表示,并检查它们是否有效。接下来,我们可以根据上午/下午标识将小时数转换为24小时制,并与分钟和秒一起组成Date对象。最后,我们可以使用Date对象的getTime方法将时间戳转换为毫秒数,并使用它们比较不同时间之间的大小。
以下是JavaScript中的解决方案代码:
function timeConversion(s) {
let [hours, minutes, seconds, period] = s.split(/:|\s/)
let isValid = true;
if (parseInt(hours) < 0 || parseInt(hours) > 12) {
isValid = false;
}
if (parseInt(minutes) < 0 || parseInt(minutes) > 59) {
isValid = false;
}
if (parseInt(seconds) < 0 || parseInt(seconds) > 59) {
isValid = false;
}
if (!isValid) {
return "Invalid time";
}
if (period === "PM" && parseInt(hours) !== 12) {
hours = parseInt(hours) + 12;
} else if (period === "AM" && parseInt(hours) === 12) {
hours = "00";
}
const date = new Date(`01/01/2020 ${hours}:${minutes}:${seconds}`);
const time = date.getTime();
return {
earliest: formatTime(new Date(time)),
latest: formatTime(new Date(time + 86399999))
};
}
function formatTime(date) {
const hours = `${date.getHours()}`.padStart(2, "0");
const minutes = `${date.getMinutes()}`.padStart(2, "0");
const seconds = `${date.getSeconds()}`.padStart(2, "0");
return `${hours}:${minutes}:${seconds}`;
}
该函数将输入字符串s
作为参数,并返回一个对象,其中包含最早和最晚时间的24小时格式字符串。如果输入的时间无效,则函数将返回“Invalid time”。
首先,我们将输入字符串拆分为小时,分钟,秒和上午/下午标识,并确保它们的值处于有效范围内。如果时间无效,则函数返回“Invalid time”。
接下来,我们将上午/下午标识用于小时数,并根据需要将其转换为24小时制。使用小时,分钟和秒创建一个Date对象,并使用它的getTime方法将其转换为时间戳。
最后,我们使用formatTime函数将时间戳转换为具有24小时格式的字符串,并将其作为最早和最晚时间的输出返回。要计算“最晚”的时间,我们只需将时间戳添加到一天的末尾,然后使用formatTime函数转换为字符串。
以上是使用JavaScript解决“电影中美好的一天”Hackerrank问题的解决方案,其中包括如何处理给定的时间字符串,如何转换为24小时制并使用时间戳比较时间的方法。