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

问题描述 投票:0回答:12

如何将秒转换为

HH:mm:ss

目前我正在使用下面的功能

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

这适用于 Chrome,但在 Firefox 中 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];

仍然好奇如何在 moment.js 中做到这一点

javascript momentjs
12个回答
154
投票

这与另一篇文章引用的答案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),您将不会得到您期望的结果。


97
投票

这篇文章我会尝试这样做以避免跳跃问题

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


31
投票

您可以使用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
<!-- 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>

另请参阅此Fiddle

更新:为避免修剪小于 60 秒的值,请使用

{ trim: false }
:

var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"

19
投票
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();

8
投票

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

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

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


5
投票

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

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

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

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


5
投票

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

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

4
投票

直到24小时。 由于

Duration.format
已弃用,因此 [电子邮件受保护]

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

1
投票

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

首先,您需要导入

moment
moment-duration-format

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

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

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

🎉好吧,你没有上述类型错误。 🤔上午 8:00 您得到正确的值吗?不……,您得到的值是 8:00 a。 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, '')

0
投票

要显示天数以及小时、分钟和秒,您可以执行以下操作:

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

将输出: 1 天 11:01:42


0
投票

2022 年不需要任何新插件就这样做

实际上,您在 2022 年所需的一切都可以从两个不同的日期字符串打印出 hh:mm:ss 的持续时间

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


0
投票

我认为不需要使用第三部分库/插件来完成这项任务
当使用 momentJS 版本 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`;
  }

还支持24小时格式
PS:您可以使用“小数到时间”计算器自行测试和计算,网址为CalculatorSoup

© www.soinside.com 2019 - 2024. All rights reserved.