使用 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 持续时间