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小时时间),分钟,上午或下午.
使用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)