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

时间:2015-07-10 09:33:19

标签: javascript momentjs

如何将秒数转换为?install.packages

目前我正在使用以下功能

HH:mm:ss

这适用于chrome但在firefox中持续12秒我得render: function (data){ return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");; } 我想使用moment.js来实现跨浏览器兼容性

我尝试了这个但是不起作用

01:00:12

我做错了什么?

修改

我设法找到了一个解决方案没有 moment.js,如下所示

render: function (data){
         return moment(data).format('HH:mm:ss');
}

仍然很好奇我怎么能在moment.js

中做到这一点

9 个答案:

答案 0 :(得分:54)

this post我会尝试这样做以避免跳跃问题

moment("2015-01-01").startOf('day')
    .seconds(s)
    .format('H:mm:ss');

我没有运行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
}



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]);
}    
*/
&#13;
&#13;
&#13;

答案 1 :(得分:53)

这类似于另一篇文章中引用的mplungjan的答案,但更简洁:

const secs = 456;

const formatted = moment.utc(secs*1000).format('HH:mm:ss');

document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

它有同样的警告,例如:如果秒数超过一天(86400),你将得不到你期望的结果。

答案 2 :(得分:19)

您可以使用moment-duration-format插件:

&#13;
&#13;
var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
&#13;
<!-- 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>
&#13;
&#13;
&#13;

另见Fiddle

答案 3 :(得分:11)

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();

答案 4 :(得分:2)

直到24小时。 由于Duration.format已过时,moment @ 2.23.0

const seconds = 123;
moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');

答案 5 :(得分:2)

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

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

moment.duration({"seconds": 30}).humanize()

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

答案 6 :(得分:1)

如何正确使用moment.js持续时间? | 在代码中使用moment.duration()

首先,您需要导入momentmoment-duration-format

import moment from 'moment';
import 'moment-duration-format';

然后,使用持续时间功能。让我们以上面的示例为例:28800 = 8 am。

moment.duration(28800, "seconds").format("h:mm a");

?好,您没有上述类型错误。您在8:00上午获得正确的值吗?不,您获得的价值是8:00。 Moment.js格式无法正常运行。

?解决方案是将秒转换为毫秒,并使用UTC时间。

moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')

好的,我们现在早上8:00。如果您希望整点时间是上午8点而不是8:00,我们需要进行RegExp

const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a');
time.replace(/:00/g, '')

答案 7 :(得分:1)

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

const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
在示例中,

您的秒而不是'S'。 只需在需要的地方使用“ formattedSeconds”即可。

答案 8 :(得分:0)

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

  var formatted = moment.utc(seconds*1000).format("mm:ss");
  console.log(formatted);