如何在 moment.js 中将秒数转换为 HH:mm:ss
How to convert seconds to 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}).*/, "");;
}
这适用于 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
中做到这一点感到好奇
来自 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]);
}
*/
这与另一个post引用的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),您将无法获得预期的结果。
您可以使用 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"
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.duration()
首先,您需要导入moment
和moment-duration-format
。
import moment from 'moment';
import 'moment-duration-format';
然后,使用持续时间功能。让我们套用上面的例子:28800 = 8 am.
moment.duration(28800, "seconds").format("h:mm a");
嗯,你没有上面的类型错误。你得到一个正确的值 8:00 am 吗?不…,你得到的值是 8:00 a。 Moment.js 格式不正常。
解决方法是将秒转换为毫秒并使用UTC时间。
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
好的,我们现在 8:00 了。如果你想要 8 am 而不是 8:00 am 作为积分时间,我们需要做 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');
我将seconds(数字)改为字符串格式(例如:'mm:ss')的解决方案:
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
在例子中写你的秒而不是'S'。
只需在需要的地方使用 'formattedSeconds'。
以更好的方式利用 moments.js;您可以将秒数转换为人类可读的单词,例如(几秒、2 分钟、一小时)。
下面的示例应将 30 秒转换为“几秒”
moment.duration({"seconds": 30}).humanize()
其他有用的功能:“分钟”、“小时”
上面的例子可能对某些人有用,但 none 对我有用,所以我想出了一个更简单的方法
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 );
将输出:
1 天 11:01:42
如何将秒数转换为 HH:mm:ss
?
目前我正在使用下面的功能
render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "");;
}
这适用于 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
中做到这一点感到好奇来自 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]);
}
*/
这与另一个post引用的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),您将无法获得预期的结果。
您可以使用 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"
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.duration()
首先,您需要导入moment
和moment-duration-format
。
import moment from 'moment';
import 'moment-duration-format';
然后,使用持续时间功能。让我们套用上面的例子:28800 = 8 am.
moment.duration(28800, "seconds").format("h:mm a");
嗯,你没有上面的类型错误。你得到一个正确的值 8:00 am 吗?不…,你得到的值是 8:00 a。 Moment.js 格式不正常。
解决方法是将秒转换为毫秒并使用UTC时间。
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
好的,我们现在 8:00 了。如果你想要 8 am 而不是 8:00 am 作为积分时间,我们需要做 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');
我将seconds(数字)改为字符串格式(例如:'mm:ss')的解决方案:
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
在例子中写你的秒而不是'S'。 只需在需要的地方使用 'formattedSeconds'。
以更好的方式利用 moments.js;您可以将秒数转换为人类可读的单词,例如(几秒、2 分钟、一小时)。
下面的示例应将 30 秒转换为“几秒”
moment.duration({"seconds": 30}).humanize()
其他有用的功能:“分钟”、“小时”
上面的例子可能对某些人有用,但 none 对我有用,所以我想出了一个更简单的方法
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 );
将输出: 1 天 11:01:42