将毫秒转换为 ISO 8601 持续时间
Convert milliseconds to an ISO 8601 duration
使用 Moment.js 将以毫秒为单位的持续时间转换为 ISO 8601 持续时间的最简单方法是什么?
例如:
3600000 milliseconds > PT1H
你可以这样做:
// Duration 1 hour
var duration = moment.duration(1, 'h');
console.log( duration.asMilliseconds() ) // 3600000
// Convert to ISO8601 duration string
console.log( duration.toISOString() ) // "PT1H"
另外,5分钟赞:
var duration = moment.duration(5, 'm');
console.log( duration.asMilliseconds() ) // 300000
// Convert to ISO8601 duration string
console.log( duration.toISOString() ) // "PT5M"
由于这是目前搜索如何使用 JavaScript 将毫秒转换为 ISO 8601 duration 时的最佳结果之一,这里有一种使用 vanilla JS 的方法,适用于那些不能或不这样做的人不想使用 Moment.js.
const duration = (ms) => {
const dt = new Date(ms);
const units = [
['Y', dt.getUTCFullYear() - 1970],
['M', dt.getUTCMonth()],
['D', dt.getUTCDate() - 1],
['T', null],
['H', dt.getUTCHours()],
['M', dt.getUTCMinutes()],
['S', dt.getUTCSeconds()]
];
let str = units.reduce((acc, [k, v]) => {
if (v) {
acc += v + k;
} else if (k === 'T') {
acc += k;
}
return acc;
}, '');
str = str.endsWith('T') ? str.slice(0, -1) : str;
return str ? `P${str}` : null;
};
console.log(duration(110723405000));
// P3Y6M4DT12H30M5S
console.log(duration(3600000));
// PT1H
使用 Moment.js 将以毫秒为单位的持续时间转换为 ISO 8601 持续时间的最简单方法是什么?
例如:
3600000 milliseconds > PT1H
你可以这样做:
// Duration 1 hour
var duration = moment.duration(1, 'h');
console.log( duration.asMilliseconds() ) // 3600000
// Convert to ISO8601 duration string
console.log( duration.toISOString() ) // "PT1H"
另外,5分钟赞:
var duration = moment.duration(5, 'm');
console.log( duration.asMilliseconds() ) // 300000
// Convert to ISO8601 duration string
console.log( duration.toISOString() ) // "PT5M"
由于这是目前搜索如何使用 JavaScript 将毫秒转换为 ISO 8601 duration 时的最佳结果之一,这里有一种使用 vanilla JS 的方法,适用于那些不能或不这样做的人不想使用 Moment.js.
const duration = (ms) => {
const dt = new Date(ms);
const units = [
['Y', dt.getUTCFullYear() - 1970],
['M', dt.getUTCMonth()],
['D', dt.getUTCDate() - 1],
['T', null],
['H', dt.getUTCHours()],
['M', dt.getUTCMinutes()],
['S', dt.getUTCSeconds()]
];
let str = units.reduce((acc, [k, v]) => {
if (v) {
acc += v + k;
} else if (k === 'T') {
acc += k;
}
return acc;
}, '');
str = str.endsWith('T') ? str.slice(0, -1) : str;
return str ? `P${str}` : null;
};
console.log(duration(110723405000));
// P3Y6M4DT12H30M5S
console.log(duration(3600000));
// PT1H