我得到一个变量字符串,如下所示:
上午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。
如果您正在寻找一种将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
不使用任何额外的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"
使用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小时格式。任何人都可以解决这个问题。我想得到的输出就像 问题答案: 试试这个: