当前位置: 首页 > 知识库问答 >
问题:

将HH: mm am/pm的时间串更改为24小时时间

孟修竹
2023-03-14

我得到一个变量字符串,如下所示:

上午8点45分

如果是下午,则希望将其转换为24小时制。这样我就可以放下am/pm,用它来做别的事情。

我可以像这样轻松地放弃am/pm:

function replaceEnds(string) {
        string = string.replace("am", "");
        string = string.replace("pm", "");
        return string;
    }

当然,如果我这样做,我不知道字符串是am还是pm,所以我不知道在字符串上加上12小时,使它成为24小时。

有人知道我该如何解决这个问题吗?我绝对无法更改我得到的变量输入,它将始终是小时(在 12 小时内)、分钟和 am 或 pm。

共有3个答案

荀裕
2023-03-14

如果您正在寻找一种将ANY FORMAT正确转换为24小时HH:MM的解决方案。

function get24hTime(str){
    str = String(str).toLowerCase().replace(/\s/g, '');
    var has_am = str.indexOf('am') >= 0;
    var has_pm = str.indexOf('pm') >= 0;
    // first strip off the am/pm, leave it either hour or hour:minute
    str = str.replace('am', '').replace('pm', '');
    // if hour, convert to hour:00
    if (str.indexOf(':') < 0) str = str + ':00';
    // now it's hour:minute
    // we add am/pm back if striped out before 
    if (has_am) str += ' am';
    if (has_pm) str += ' pm';
    // now its either hour:minute, or hour:minute am/pm
    // put it in a date object, it will convert to 24 hours format for us 
    var d = new Date("1/1/2011 " + str);
    // make hours and minutes double digits
    var doubleDigits = function(n){
        return (parseInt(n) < 10) ? "0" + n : String(n);
    };
    return doubleDigits(d.getHours()) + ':' + doubleDigits(d.getMinutes());
}

console.log(get24hTime('6')); // 06:00
console.log(get24hTime('6am')); // 06:00
console.log(get24hTime('6pm')); // 18:00
console.log(get24hTime('6:11pm')); // 18:11
console.log(get24hTime('6:11')); // 06:11
console.log(get24hTime('18')); // 18:00
console.log(get24hTime('18:11')); // 18:11
方璞
2023-03-14

不使用任何额外的JavaScript库:

/**
 * @var amPmString - Time component (e.g. "8:45 PM")
 * @returns - 24 hour time string
 */
function getTwentyFourHourTime(amPmString) { 
    var d = new Date("1/1/2013 " + amPmString); 
    return d.getHours() + ':' + d.getMinutes(); 
}

所以例如:

getTwentyFourHourTime("8:45 PM"); // "20:45"
getTwentyFourHourTime("8:45 AM"); // "8:45"
仲孙疏珂
2023-03-14

使用moment.js:

moment(string, 'h:mm a').format('H:mm');

如果您想手动执行此操作,这将是我的解决方案

function to24Hour(str) {
    var tokens = /([10]?\d):([0-5]\d) ([ap]m)/i.exec(str);
    if (tokens == null) { return null; }
    if (tokens[3].toLowerCase() === 'pm' && tokens[1] !== '12') {
        tokens[1] = '' + (12 + (+tokens[1]));
    } else if (tokens[3].toLowerCase() === 'am' && tokens[1] === '12') {
        tokens[1] = '00';
    }
    return tokens[1] + ':' + tokens[2];
}

手动解决方案更难理解,不太灵活,缺少一些错误检查,并且需要单元测试。一般来说,你应该更喜欢一个经过良好测试的流行库的解决方案,而不是你自己的(如果有一个经过良好测试的库的话)。

 类似资料:
  • 问题内容: 我有2个正在使用的字段存储为smallint军事结构化时间。 编辑 我正在IBM Informix Dynamic Server版本10.00.FC9上运行 beg_tm和end_tm 样本值 样品输出 我曾在Perl中工作过,但我正在寻找一种使用SQL和case语句的方法。 这有可能吗? 编辑 本质上,此格式必须在ACE报告中使用。我找不到使用以下简单块在输出部分中对其进行格式化的方

  • 我有一个GMT时间格式,我通过使用以下方式将其更改为我的本地浏览器时间: 输出为: 现在我想在中将12小时格式更改为24小时格式 示例: 有什么建议吗? 谢谢

  • 我正在使用TextView设置日期和时间与日期名称,但时间显示在24小时,我想设置在12小时格式。

  • 问题内容: 有没有简单的方法可以使用jquery将12小时hh:mm AM / PM转换为24小时hh:mm? 注意:不使用任何其他库。 我有一个返回hh:mm AM / PM的。 问题答案: 尝试这个

  • 当我在javascript中使用“getHour()”方法时,它会显示军事时间格式。我需要它以1-12之间的数字显示小时。有人能告诉我怎么做吗?以下是我使用的代码:

  • 问题内容: 我从服务器获得的时间就像 。 我想将其转换为。 我还希望转换后的时间为24小时格式。任何人都可以解决这个问题。我想得到的输出就像 问题答案: 试试这个: