Javascript 时刻JS持续时间显示错误的时间?

Javascript 时刻JS持续时间显示错误的时间?,javascript,time,momentjs,Javascript,Time,Momentjs,我正在尝试使用MomentJS以及持续时间和格式的组合,将持续时间(以秒为单位)转换为人性化的输出。 我以秒为单位获取持续时间,然后将其格式化为: const value = 337650 const duration = (durationSeconds) => { const duration = moment.duration(durationSeconds, 'seconds') return moment.utc(duration.asMilliseconds()).fo

我正在尝试使用MomentJS以及持续时间和格式的组合,将持续时间(以秒为单位)转换为人性化的输出。 我以秒为单位获取持续时间,然后将其格式化为:

const value = 337650
const duration = (durationSeconds) => {
  const duration = moment.duration(durationSeconds, 'seconds')
  return moment.utc(duration.asMilliseconds()).format('D [days] HH:mm:ss')
}

console.log(`Duration: ${duration(value)}`)
输出

“持续时间:4天21:47:30”

我的问题是它似乎错了。在线服务,比如少看一天的节目。 我不确定这些服务使用的是什么库/算法,以及它们是否显示了正确的时间或时刻。
非常感谢您的任何想法

您似乎正在将持续时间转换为历元时间,然后对其进行格式化,这将是错误的


有关持续时间格式的详细信息,请查看本期

您可以使用时刻持续时间格式插件来格式化持续时间,以前的方法(根据持续时间创建新的绝对日期)不起作用。当您在Unix纪元开始时间上加上337650秒时,您将得到1970年1月4日21:47:30,这就是为什么您将这一天视为4

假设我们需要设置一个持续时间,比如说2700000秒,作为这将如何严重出错的进一步示例。这将为我们提供“1天06:00:00”的输出。为什么?因为它相当于1970年2月1日06:00。(实际结果为31天,06:00:00)

我不认为我们可以责怪moment.js的作者(他们做了一项了不起的工作),只是没有像应该使用的那样在moment.js上使用format函数

通过使用矩持续时间格式的format函数,我们将格式设置为持续时间而不是绝对时间,我们得到了正确的结果

momentDurationFormatSetup(时刻);
常数值=337650
常量持续时间=(持续时间秒)=>{
常数持续时间=时刻持续时间(持续时间秒,'秒')
返回持续时间.format('D[days]HH:mm:ss');
}
log(`Duration:${Duration(value)}`)
document.getElementById('output').innerHTML=`Duration:${Duration(value)}`

可以使用人性化方法进行简单格式化:

let value = 337650
let duration = moment.duration(value, 'seconds')
duration = duration.humanize()
console.log(duration)
“4天”

对于更复杂的格式,您可能需要深入研究:。

尝试一些简单的方法:

var x = 337650%86400; 
var days = (337650 - x)/86400; 
var y = x%3600; 
var hours= (x-y)/3600; 
var sec = y%60; 
var mins=(y-sec)/60; 
alert(days + ' days ' + hours+':'+mins+':'+sec)

我们知道一天有86400秒。337650/86400=3.9079天,因此肯定少于您打印的四天时间。由于控制台输出显示持续时间包含
\u数据:[object object]{days:3,hours:21,…
,因此很明显,实际上是.utc().format()部分弄糟了这一点。