【问题标题】:Convert seconds to HH-MM with JavaScript?使用 JavaScript 将秒转换为 HH-MM?
【发布时间】:2017-02-19 11:42:17
【问题描述】:

我一直在为 HH:MM:SS 使用这个出色的函数,但我如何修改它以仅返回 HH:MM,秒数被截断或舍入。

function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

【问题讨论】:

  • 你愿意使用第三方库吗? MomentJS 是处理时间和日期的好方法。
  • 注意,如果秒数大于1天,你会得到一个不正确的值。

标签: javascript date format seconds


【解决方案1】:
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*?(\d{2}:\d{2}).*/, "$1");
}

删除最后一个\d{2} 并在第一个* 之后添加?

【讨论】:

    【解决方案2】:

    使用日期来格式化秒的问题是它无法处理超过 24 小时的时间和日期的变幻莫测。只需根据需要重新格式化该值:

    function formatSeconds(seconds) {
      function z(n) {return (n < 10 ? '0' : '') + n;}
      return z(seconds / 3600 | 0) + ':' + z((seconds % 3600) / 60 | 0)
    }
    
    // Some examples
    [0,1,61,3600,3660,765467].forEach(function (seconds) {
      console.log(seconds + ' -> ' + formatSeconds(seconds))
    });

    没有日期,没有正则表达式,没有库,没有依赖项,并且适用于曾经支持 ECMAScript 的所有主机。

    【讨论】:

      【解决方案3】:

      虽然理想的方法是使用moment.js,但如果你想使用自定义函数,你可以试试这样的:

      function formatSeconds(milliseconds, format) {
        var dateObj = new Date(milliseconds);
      
        function getDoubleDigits(value){
          return ("0" + value).slice(-2)
        }
        
        var o = {
          DD: getDoubleDigits(dateObj.getDate()),
          MM: getDoubleDigits(dateObj.getMonth() + 1),
          YY: dateObj.getYear(),
          YYYY: dateObj.getFullYear(),
          hh: getDoubleDigits(dateObj.getHours()),
          mm: getDoubleDigits(dateObj.getMinutes()),
          ss: getDoubleDigits(dateObj.getSeconds())
        }
        
        var dilimeter = format.match(/[^\w]/)[0];
        return format.split(dilimeter).map(function(f){
          return o[f];
        }).join(dilimeter);
      }
      
      var today = new Date();
      console.log(formatSeconds(+today, "DD-MM-YYYY"))
      console.log(formatSeconds(+today, "hh:mm"))

      【讨论】:

      • 为什么moment.js会是“理想的”?生成所需格式的函数只需 2 行代码。
      • @RobG 因为它处理的比要求的要多得多。 OP 正在处理时间,所以他会使用这个功能。然后,如果需要另一种格式,他会编写另一个函数。我试图制作通用功能,但时刻已经解决了日期问题,并且在我的理解中重新发明轮子是一种矫枉过正。是的,仅在这种情况下使用 moment 也有点矫枉过正,但作为建议,我认为 moment 更适合日期时间操作
      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多