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

如何将秒数转换为 HH:mm:ss

目前我正在使用下面的函数

render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}

这个工程在铬,但在火狐为12秒,我得到 01:00:12 我想使用 Moment.js 来实现跨浏览器兼容性

我试过这个,但没有工作

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

我做错了什么?

剪辑

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

return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

还是很好奇我现在要怎么做

159405 次浏览

这篇文章我会尝试这一点,以避免跳跃问题

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

这类似于另一篇文章中提到的回答,但更简洁:

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>

It suffers from the same caveats, e.g. if seconds exceed one day (86400), you'll not get what you expect.

你可以使用 力矩-持续时间-格式插件:

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

再看看这个 小提琴

Upd: To avoid trimming for values less than 60-sec use { trim: false }:

var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"
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();

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

First, you need to import moment and moment-duration-format.

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

然后,使用持续时间函数,让我们应用上面的例子: 28800 = 8 am。

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

好吧,你没有以上的类型错误。你早上八点的价格对吗?你得到的值是8:00 a.Moment.js 格式不能正常工作。

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

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

All right we get 8:00 am now. If you want 8 am instead of 8:00 am for integral time, we need to do RegExp

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

直到24小时。 因为 Duration.format已经被废弃了,而 moment@2.23.0

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

我改变 秒(数字)到字符串格式的解决方案(例如: ‘ mm: ss’) :

const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');

在例子中写 你的秒而不是 S。 And just use the 'formattedSeconds' where you need.

In a better way to utiliza moments.js; you can convert the number of seconds to human-readable words like ( a few seconds, 2 minutes, an hour).

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

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

Other useful features: "minutes", "hours"

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

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

要显示天数以及小时、分钟和秒,可以这样做:

const totalSec = 126102;
const remainingMillies= (totalSec % 86400) * 1000;
const formatted = `${Math.floor(totalSec / 86400)} day(s) and ${moment.utc(remainingMillies).format('hh:mm:ss')}`;
console.log(formatted );

will output : 1 day(s) and 11:01:42

在2022年,不需要任何新的插件,只需要这样做

实际上,2022年所需要的全部内容就是从两个不同的日期字符串中以 hh: mm: ss 格式打印出持续时间

<Moment format='hh:mm:ss' duration={startTime} date={endTime} />


我认为没有必要使用第三部分库/插件来完成这项任务
使用 momentJS version 2.29.4时:

  private getFormatedDuration(start: Date, end: Date): string {
// parse 'normal' Date values to momentJS values
const startDate = moment(start);
const endDate = moment(end);


// calculate and convert to momentJS duration
const duration = moment.duration(endDate.diff(startDate));


// retrieve wanted values from duration
const hours = duration.asHours().toString().split('.')[0];
const minutes = duration.minutes();


// voilà ! without using any 3rd library ..
return `${hours} h ${minutes} min`;
}

supports also 24h format
附言: 你可以自己使用“十进制时间”计算器测试和计算,地址是: http://www.CalculatorSoup.com/Calculators/time/decal-to-time-Calculator.php”rel = “ nofollow norefrer”> CalculatorSoup