将毫秒转换为ISO 8601持续时间

问题描述 投票:1回答:2

使用Moment.js将持续时间(以毫秒为单位)转换为ISO 8601持续时间的最简单方法是什么?

例如:

3600000 milliseconds > PT1H
javascript momentjs duration iso8601
2个回答
1
投票

你可以这样做:

// 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"

2
投票

由于这是目前搜索如何使用JavaScript将毫秒转换为ISO 8601 duration的最佳结果之一,因此这是一种使用vanilla JS的方法,用于那些不能或不想使用Moment.js的方法。

const duration = (ms) => {
  let dt = new Date(ms);
  let elems = [
    ['Y', dt.getUTCFullYear() - 1970],
    ['M', dt.getUTCMonth()],
    ['D', dt.getUTCDate() - 1],
    ['T', null],
    ['H', dt.getUTCHours()],
    ['M', dt.getUTCMinutes()],
    ['S', dt.getUTCSeconds()]
  ];
  let s = elems.reduce((acc, [k, v]) => {
    if (v) {
      acc += v + k;
    } else if (k === 'T') {
      acc += k;
    } 
    return acc;
  }, '');
  s = s.endsWith('T') ? s.slice(0, -1) : s;
  return s ? `P${s}` : null;
}

console.log(duration(110723405000));
// P3Y6M4DT12H30M5S
console.log(duration(3600000));
// PT1H
© www.soinside.com 2019 - 2024. All rights reserved.