QGA*_*QGA 74 javascript momentjs
如何将秒转换为HH:mm:ss?
目前我正在使用下面的功能
render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}
Run Code Online (Sandbox Code Playgroud)
这适用于chrome但在firefox中使用12秒我得到了01:00:12
我想使用moment.js来实现跨浏览器的兼容性
我尝试了这个但是没有用
render: function (data){
return moment(data).format('HH:mm:ss');
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑
我设法找到了没有 moment.js 的解决方案,如下所示
return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
Run Code Online (Sandbox Code Playgroud)
仍然很好奇我怎么能在moment.js做到这一点
Sop*_*hie 69
这类似于另一篇文章中引用的mplungjan的答案,但更简洁:
const secs = 456;
const formatted = moment.utc(secs*1000).format('HH:mm:ss');
document.write(formatted);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>Run Code Online (Sandbox Code Playgroud)
它有同样的警告,例如,如果秒超过一天(86400),你将无法得到你所期望的.
mpl*_*jan 58
从这篇文章中我会试着避免跳跃问题
moment("2015-01-01").startOf('day')
.seconds(s)
.format('H:mm:ss');
Run Code Online (Sandbox Code Playgroud)
我没有运行jsPerf,但我认为这比创建新的日期对象快一百万倍
function pad(num) {
return ("0"+num).slice(-2);
}
function hhmmss(secs) {
var minutes = Math.floor(secs / 60);
secs = secs%60;
var hours = Math.floor(minutes/60)
minutes = minutes%60;
return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
// return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}
Run Code Online (Sandbox Code Playgroud)
function pad(num) {
return ("0"+num).slice(-2);
}
function hhmmss(secs) {
var minutes = Math.floor(secs / 60);
secs = secs%60;
var hours = Math.floor(minutes/60)
minutes = minutes%60;
return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
// return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}
for (var i=60;i<=60*60*5;i++) {
document.write(hhmmss(i)+'<br/>');
}
/*
function show(s) {
var d = new Date();
var d1 = new Date(d.getTime()+s*1000);
var hms = hhmmss(s);
return (s+"s = "+ hms + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]);
}
*/Run Code Online (Sandbox Code Playgroud)
小智 21
您可以使用moment-duration-format插件:
var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40Run Code Online (Sandbox Code Playgroud)
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>Run Code Online (Sandbox Code Playgroud)
另见这个小提琴
yeh*_*kel 12
var seconds = 2000 ; // or "2000"
seconds = parseInt(seconds) //because moment js dont know to handle number in string format
var format = Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();
Run Code Online (Sandbox Code Playgroud)
我将秒(数字)更改为字符串格式的解决方案(例如:'mm:ss'):
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Run Code Online (Sandbox Code Playgroud)
在示例中写下你的秒而不是'S'。只需在需要的地方使用“formattedSeconds”即可。
以更好的方式利用moments.js;您可以将秒数转换为人类可读的单词,例如(几秒、2 分钟、一小时)。
下面的示例应将 30 秒转换为“几秒”
moment.duration({"seconds": 30}).humanize()
Run Code Online (Sandbox Code Playgroud)
其他有用的功能:“分钟”、“小时”
上面的例子可能对某人有用,但对我来说没有,所以我想出了一个更简单的方法
var formatted = moment.utc(seconds*1000).format("mm:ss");
console.log(formatted);
Run Code Online (Sandbox Code Playgroud)