0

可能重复:
JavaScript 秒到时间,格式为 hh:mm:ss

在我看来,这是一项简单的任务,但我还没有设法完成这项工作。

本质上,我从一个包含 ISO 格式时间 (HH:MM:SS) 的字符串开始,我想知道如何使用 JavaScript 将其转换为 H:MM am|pm。

任何帮助深表感谢。

4

4 回答 4

4

你好,这可能对你有帮助......它是一个名为moments的jquery插件......

用于解析、操作和格式化日期的轻量级 (4.8k) javascript 日期库。

Moment.js

于 2012-09-06T19:23:02.160 回答
3

这个简单的函数应该可以解决问题:

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/

于 2012-09-06T19:38:12.283 回答
2

仅仅因为出现了无法正确处理中午或午夜时间的解决方案,我将把我的帽子扔进戒指,即使它与提供的没有什么不同(除了它正常工作的事实):

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;
};
于 2012-09-06T19:57:50.967 回答
1

像这样的东西会起作用......

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];

编辑:关于中午和午夜的问题的评论中有一些要点。我将把解决这些问题作为练习留给读者。(我觉得这里真正有趣的部分是进行字符串解析

于 2012-09-06T19:34:58.240 回答