📌  相关文章
📜  电影中美好的一天hackerrank解决方案 - Javascript(1)

📅  最后修改于: 2023-12-03 15:11:21.060000             🧑  作者: Mango

电影中美好的一天 Hackerrank 解决方案 - JavaScript

在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小时制并使用时间戳比较时间的方法。