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

Dav*_*d G 3 javascript time date

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

上午8:45

并希望,如果是下午,将其转换为24小时的时间.这样我就可以放弃am/pm并将其与其他内容一起使用.

我可以很容易地放下上午/下午:

function replaceEnds(string) {
        string = string.replace("am", "");
        string = string.replace("pm", "");
        return string;
    }
Run Code Online (Sandbox Code Playgroud)

但是当然如果我这样做,我不知道字符串是上午还是下午,所以我不知道要在字符串上加12小时才能使它24小时.

谁知道我怎么解决这个问题?我绝对不能改变我得到的变量输入,它总是小时(12小时时间),分钟,上午或下午.

for*_*all 6

使用moment.js:

moment(string, 'h:mm a').format('H:mm');
Run Code Online (Sandbox Code Playgroud)

如果你想手动完成,这将是我的解决方案:

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];
}
Run Code Online (Sandbox Code Playgroud)

手动解决方案难以理解,灵活性较差,缺少一些错误检查并需要单元测试.一般来说,您通常应该选择经过良好测试的流行库解决方案,而不是您自己的(如果有经过良好测试的库可用).


小智 6

不使用任何其他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(); 
}
Run Code Online (Sandbox Code Playgroud)

例如:

getTwentyFourHourTime("8:45 PM"); // "20:45"
getTwentyFourHourTime("8:45 AM"); // "8:45"
Run Code Online (Sandbox Code Playgroud)