【问题标题】:Convert ISO time to H:MM am|pm in JavaScript [duplicate]在 JavaScript 中将 ISO 时间转换为 H:MM am|pm [重复]
【发布时间】:2012-08-31 16:14:39
【问题描述】:

可能重复:
JavaScript seconds to time with format hh:mm:ss

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

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

非常感谢任何帮助。

【问题讨论】:

    标签: javascript time iso


    【解决方案1】:

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

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

    Moment.js

    【讨论】:

      【解决方案2】:

      这样的事情会起作用......

      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 中有一些关于此问题的重要观点。我将把解决这些问题作为练习留给读者。 (我觉得这里真正有趣的部分是做字符串解析

      【讨论】:

      • 小心,我认为你的比较运算符应该是>而不是>=
      • @Travis 说对了一半。 >= 12 不好,因为它会将"12:34:45" 变成"00:34:45pm"。需要进行第二次检查以解决中午时间的特殊情况(它是“下午”,但没有得到减法校正)
      【解决方案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/

      【讨论】:

      • 此解决方案会将"12:34:45" 标记为“am”。正如我上面提到的,中午是一个特殊情况,需要单独处理。
      • 你是对的@Pete。我修复了我的代码以单独处理中午时间。
      • 你仍然有午夜的问题。试试“00:12:34”看看会发生什么。 :-) (快到了!)
      • 已修复(再次)。我应该改变这个“简单”功能的措辞吗哈哈。
      • 还有一个错误,看看当你输入"01:23:45" 时会发生什么——它会给你"01:23 am",而"13:23:45" 会返回"1:23 pm"。您应该强制 hours 成为数字以删除前导 0。 (很快你就会有我的解决方案,呵呵)。
      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-07-07
        • 2020-05-23
        • 2011-12-29
        • 2018-01-21
        • 1970-01-01
        • 2023-04-09
        • 2022-11-28
        • 2017-01-16
        • 1970-01-01
        相关资源
        最近更新 更多