使用 JavaScript 将秒转换为 HH-MM?

Posted

技术标签:

【中文标题】使用 JavaScript 将秒转换为 HH-MM?【英文标题】:Convert seconds to HH-MM with JavaScript? 【发布时间】: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(/.*(\d2:\d2:\d2).*/, "$1");

【问题讨论】:

你愿意使用第三方库吗? MomentJS 是处理时间和日期的好方法。 注意,如果秒数大于1天,你会得到一个不正确的值。 【参考方案1】:
function formatSeconds(seconds)

    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*?(\d2:\d2).*/, "$1");

删除最后一个\d2 并在第一个* 之后添加?

【讨论】:

【参考方案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 更适合日期时间操作

以上是关于使用 JavaScript 将秒转换为 HH-MM?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 将秒转换为 ISO 8601 持续时间

将秒转换为时:分:秒

js将秒转换为 分:秒 函数

将秒转换为天、小时、分钟、秒格式 (C++)

使用 Prometheus 和 Grafana 将秒转换为 HH:MM:SS

Android : 将秒转换为年、日、小时、分钟、秒