【发布时间】:2012-08-31 16:14:39
【问题描述】:
在我看来这是一项简单的任务,但我还没有设法完成这项工作。
基本上,我从一个包含 ISO 格式时间 (HH:MM:SS) 的字符串开始,我想知道如何使用 JavaScript 将其转换为 H:MM am|pm。
非常感谢任何帮助。
【问题讨论】:
标签: javascript time iso
在我看来这是一项简单的任务,但我还没有设法完成这项工作。
基本上,我从一个包含 ISO 格式时间 (HH:MM:SS) 的字符串开始,我想知道如何使用 JavaScript 将其转换为 H:MM am|pm。
非常感谢任何帮助。
【问题讨论】:
标签: javascript time iso
【讨论】:
这样的事情会起作用......
input = "12:34:45";
groups = input.match(/(.+):(.+):(.+)/);
if (groups[1] > 12) {
hour = groups[1] - 12;
unit = "pm";
} else {
hour = groups[1];
unit = "am";
}
minutes = groups[2];
编辑:在中午和午夜,cmets 中有一些关于此问题的重要观点。我将把解决这些问题作为练习留给读者。 (我觉得这里真正有趣的部分是做字符串解析)
【讨论】:
>而不是>=。
>= 12 不好,因为它会将"12:34:45" 变成"00:34:45pm"。需要进行第二次检查以解决中午时间的特殊情况(它是“下午”,但没有得到减法校正)
这个简单的函数应该可以解决问题:
function convertTime (isoTime) {
var hours = parseInt(isoTime.substring(0, 2), 10),
minutes = isoTime.substring(3, 5),
ampm = 'am';
if (hours == 12) {
ampm = 'pm';
} else if (hours == 0) {
hours = 12;
} else if (hours > 12) {
hours -= 12;
ampm = 'pm';
}
return hours + ':' + minutes + ' ' + ampm;
}
应该是不言自明的。例如,请参阅此 jsfiddle:http://jsfiddle.net/nscXP/3/
【讨论】:
"12:34:45" 标记为“am”。正如我上面提到的,中午是一个特殊情况,需要单独处理。
"01:23:45" 时会发生什么——它会给你"01:23 am",而"13:23:45" 会返回"1:23 pm"。您应该强制 hours 成为数字以删除前导 0。 (很快你就会有我的解决方案,呵呵)。
仅仅因为出现了无法正确处理中午或午夜时间的解决方案,我将把我的帽子扔进戒指,即使它与提供的没有什么不同(除了事实它工作正常):
var isoToCommonTime = function(iso) {
var groups = iso.match(/^(\d\d):(\d\d)/),
hour = +groups[1],
ampm = (hour >= 12) ? "pm" : "am";
if(hour > 12) {
hour -= 12;
} else if(hour === 0) {
hour = 12;
}
return hour + ":" + groups[2] + " " + ampm;
};
【讨论】: