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

标签 javascript momentjs duration iso8601

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

例如:

3600000 milliseconds > PT1H

最佳答案

因为这是目前搜索如何将毫秒转换为 ISO 8601 duration 的最佳结果之一。对于 JavaScript,对于那些不能或不想使用 Moment.js 的人来说,这是一种使用 vanilla 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

关于javascript - 将毫秒转换为 ISO 8601 持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633152/

相关文章:

javascript - redux thunk 中链接操作的正确方法?

javascript - jquery背景下滑

javascript - 使用 vue.js 和 moment.js 创建倒计时

javascript - Uncaught ReferenceError : angular is not defined at angular-moment. js

MySQL 查询将每个外键实例的所有内容舍入为整分钟持续时间

javascript - 如何在 Dart 中解析输入字符串?

javascript - AJAX 请求返回 JS 而不是 HTML

javascript - 尝试在 moment.js 中转换 RFC2822 日期时出现 “Deprecation warning: moment construction falls back to js Date”

MySQL 存储时间条件

c# - 获取重叠间隔的持续时间