在 javascript 中将毫秒转换为小时或分钟或小时或天

Convert milliseconds to hours or minute or hour or day in javascript

我正在尝试将毫秒转换为 ...(sec/min/hours/day) 之前, 我试过像下面的代码但我没有得到预期的结果,输出显示 19143.4 Days。应该是2或3天。

function msToTime(ms) {
  let seconds = (ms / 1000).toFixed(1);
  let minutes = (ms / (1000 * 60)).toFixed(1);
  let hours = (ms / (1000 * 60 * 60)).toFixed(1);
  let days = (ms / (1000 * 60 * 60 * 24)).toFixed(1);
  if (seconds < 60) return seconds + " Sec";
  else if (minutes < 60) return minutes + " Min";
  else if (hours < 24) return hours + " Hrs";
  else return days + " Days"
}
console.log(msToTime(1653991056493))

事实上,您的代码在这里似乎工作正常。

正在阅读 Date 文档:

JavaScript Date objects represent a single moment in time in a platform-independent format. Date objects contain a Number that represents milliseconds since 1 January 1970 UTC.

因此,当您执行 new Date(1653991056493) 时,它是 1970 年 1 月 1 日之后的 1653991056493 毫秒,即 19143.4 天


如果你想要一个日期和当前日期之间的毫秒数,你可以用时间戳减去当前日期

new Date() - 1653991056493

function msToTime(ms) {
  let seconds = (ms / 1000).toFixed(1);
  let minutes = (ms / (1000 * 60)).toFixed(1);
  let hours = (ms / (1000 * 60 * 60)).toFixed(1);
  let days = (ms / (1000 * 60 * 60 * 24)).toFixed(1);
  if (seconds < 60) return seconds + " Sec";
  else if (minutes < 60) return minutes + " Min";
  else if (hours < 24) return hours + " Hrs";
  else return days + " Days"
}
console.log(msToTime(new Date() - 1653991056493))

我对问题的解释与已接受的答案略有不同,并将其发布是因为它可能会帮助那些寻求做我被问到的事情的人:

即将经过的毫秒数减少到(四舍五入)天(四舍五入)小时(四舍五入)分钟 (四舍五入)秒 - 取决于哪个适合经过的持续时间的比例(例如,一个页面是报告 “2 天前的评论”“10 秒前的评论” 等 - 就像 SO 在报告答案或评论时所做的那样已制作。

与已接受的答案一样,必须首先通过从新日期值中减去传递的 ms 值来计算 elapsed 时间(并且,因为小于秒的单位永远不会需要,经过的值除以 1000 转换为秒):

const now = new Date();
const secondsPast = Math.round((now-pastMs)/1000);

此值随后会通过一系列 if 检查进行过滤,如果已达到相关时间单位,则每个检查都包含条件 return 语句。因此,如果 'scale' 是秒(即经过的持续时间少于一分钟),函数 return 秒值并立即退出:

if (secondsPast<60) {return `${secondsPast} seconds`} // terminates here if true;

如果秒值大于 60,则检查分钟,如果小于 60,则进行 return。如果没有其他单位合适,则重复该过程,直到最终将更大的值 return 编辑为天。请注意,使用 Math.floor 仅表示相关单位的 return 个整数。

(我认为这就是最初的问题试图达到的目的)。

function elapsedTime(pastMs) {
  const now = new Date();
  const secondsPast = Math.round((now-pastMs)/1000);
  
    if (secondsPast<60) {return `${secondsPast} seconds`} // terminates here if true;
    
  const minutesPast = Math.floor(secondsPast/60);
    if (minutesPast<60) {return `${minutesPast} minutes`} // terminates here if true;
    
  const hoursPast = Math.floor(minutesPast/60);
    if (hoursPast<24) {return `${hoursPast} hours`} // terminates here if true;
    
  return `${Math.floor(hoursPast/24)} days`;
  
} // end function elapsedTime;
    
console.log(elapsedTime(1653991056493))