使用 moment() 到“DD:HH:mm:ss”的秒数

zyn*_*nkn 1 javascript date momentjs

我正在尝试将秒转换为DD:HH:mm:ss格式或其他格式,例如 ( YYYYMMDD)

function secToFormat(seconds, format){
  return moment.utc(seconds * 1000).format(format);
}

// works well.
console.log(secToFormat(40,"HH:mm:ss"));
console.log(secToFormat(100,"HH:mm:ss"));
console.log(secToFormat(1800,"HH:mm:ss"));
console.log(secToFormat(18800,"HH:mm:ss"));
console.log(secToFormat(86300,"HH:mm:ss"));

// doesn't work I expected.
console.log(secToFormat(40,"DD:HH:mm:ss"));  //it returns 01:00:00:40 but I expect 00:00:00:40
console.log(secToFormat(100,"DD:HH:mm:ss"));  //it returns 01:00:01:40 but I expect 00:00:01:40
console.log(secToFormat(86300,"DD:HH:mm:ss"));  //it returns 01:23:58:20 but I expect 00:23:58:20
console.log(secToFormat(86400*2,"DD:HH:mm:ss"));  //it returns 03:00:00:00 but I expect 02:00:00:00

// it also doesn't work with another format.
console.log(secToFormat(40, "MM:DD:HH:mm:ss")); // I want to get 00:00:00:00:40
console.log(secToFormat(100, "MM:DD:HH:mm:ss")); // I want to get 00:00:00:01:40
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

我明白为什么会发生,因为它开始于1970-01-01 00:00:00

但我想按我的预期编辑它。

我怎样才能实现它?

Rob*_*obG 5

您可以使用 moment.js 的持续时间,但是它们没有太多格式化方式,例如

let seconds = 28763827;
let duration = moment.duration(seconds, 'seconds');
console.log('Default ISO: ' + duration); // "PT7989H57M7S"
console.log('Moment humanized: ' + duration.humanize()); // a year
console.log('Moment days: ' + duration.asDays()); // 332.91466435185185
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

考虑编写自己的函数来转换为 d.HH:mm:ss 等格式,例如

function secsToTime(secs) {
  let d = secs / 8.64e4 | 0;
  let H = (secs % 8.64e4) / 3.6e3 | 0;
  let m = (secs % 3.6e3)  / 60 | 0;
  let s = secs % 60;
  let z = n=> (n < 10? '0' : '') + n;
  return `${d}.${z(H)}:${z(m)}:${z(s)}`
}

let seconds = 28763827;
console.log(secsToTime(seconds));
Run Code Online (Sandbox Code Playgroud)