2017-02-19 95 views
0

我一直在为HH:MM:SS使用这个优秀的功能,但是我怎么能修改它以仅返回截断或舍入秒数的HH:MM。用JavaScript将秒转换成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"); 
} 
+0

您是否愿意使用第三方库? MomentJS是处理时间和日期的好机会。 –

+0

请注意,如果秒数大于1天,您将得到不正确的值。 – RobG

回答

0

使用日期格式秒的问题是,它不能处理超过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
function formatSeconds(seconds) 
{ 
    var date = new Date(1970,0,1); 
    date.setSeconds(seconds); 
    return date.toTimeString().replace(/.*?(\d{2}:\d{2}).*/, "$1"); 
} 

删除最后一个\d{2}和第一*

0

之后添加?虽然理想的方式是使用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"))

+0

为什么moment.js会是“理想”的?产生所需格式的函数只有两行代码。 – RobG

+0

@RobG,因为它处理的东西比需要的多得多。 OP正在处理时间,所以他会使用这个功能。然后如果需要另一种格式,他会写另一个函数。我尝试了通用函数,但是时刻已经解决了日期问题,并且在我的理解中重新启动了方向盘是一个过度的问题。是的,仅仅为了这种情况使用时刻也是过分的,但作为一个建议,我认为对于日期时间操纵来说更好 – Rajesh