如何将秒转换为HH:mm:ss in moment.js

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),你将无法得到你所期望的.

  • 如果是 24 小时,比如 90000 秒,那是不行的。 (4认同)

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)

  • 非常感谢,非常聪明的解决方案 (2认同)

小智 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:40
Run 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)


Adi*_*ler 6

我将秒(数字)更改为字符串格式的解决方案(例如:'mm:ss'):

const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Run Code Online (Sandbox Code Playgroud)

在示例中写下你的秒而不是'S'。只需在需要的地方使用“formattedSeconds”即可。

  • 这就是我一直在寻找的答案。很好的建议,但请记住,如果您还想显示小时数,请确保使用“HH:mm:ss”而不是“hh:mm:ss”,否则您将得到“12:**:**”持续时间少于 1 小时。 (2认同)

Sha*_*dan 5

以更好的方式利用moments.js;您可以将秒数转换为人类可读的单词,例如(几秒、2 分钟、一小时)。

下面的示例应将 30 秒转换为“几秒”

moment.duration({"seconds": 30}).humanize()
Run Code Online (Sandbox Code Playgroud)

其他有用的功能:“分钟”、“小时”


Pet*_*ter 5

上面的例子可能对某人有用,但对我来说没有,所以我想出了一个更简单的方法

  var formatted = moment.utc(seconds*1000).format("mm:ss");
  console.log(formatted);
Run Code Online (Sandbox Code Playgroud)