【问题标题】:how to calculated elapsed time in javascript in readable format如何以可读格式在javascript中计算经过的时间
【发布时间】:2018-05-28 16:27:23
【问题描述】:

假设我有这样的事情:

var time01 = new Date();
var time02 = new Date(2015, 0, 0, 0, 0, 0);
var time03 = new Date(2022, 0, 0, 0, 0, 0);

如果我想计算从time02到今天的时间,以及从现在到time03还剩多少时间,我应该这样做:

var passed01 = time01.getTime() - time02.getTime();
var passed02 = time03.getTime() - time01.getTime();

然后,我想让它可读,我做到了:

var readable01 = new Date(passed01);
var readable02 = new Date(passed02);

但它给了我大约 1970 年的一年......我怎样才能得到类似的输出:“3 年”或“3 年 15 天 17 分 23 秒”或类似的东西?

【问题讨论】:

  • 在第一行中,您要减去 2015 年的当前时间,所以我猜 javascript 确实会返回一个奇数日期,因为 javascript afaik 中没有“负”日期。
  • @Tiramonium - JS 中有负日期;让 d = 新日期(-1);控制台.log(d);输出:1969-12-31T23:59:59.999Z
  • 抱歉 :) 你说得对……我只是从记忆中输入的。但是还是一样……我会更新代码的。
  • 好吧,我的意思实际上是“你为什么想要一个否定的日期开始”,但不要介意。试着看看这个答案:stackoverflow.com/a/3067896/1361831
  • @bokuyaza - 我建议多搜索一下 js 时间/日期函数。您正在尝试做的事情相当简单并且在过去完成。我建议将日期转换为秒,进行计算然后转换为可读格式:[link]stackoverflow.com/questions/45124401/…let d = new Date().getTime()

标签: javascript jquery date datetime


【解决方案1】:

要回答您的问题,您的代码给出 1970 年左右的结果的原因是因为您使用 new Date() 的方式。 New Date 是一个 JS 函数,它返回您发送给它的任何时间的 UNIX 日期。由于您只发送一个参数,因此该参数被视为毫秒,它返回 1970 年 1 月 1 日 UNIX 纪元之后该毫秒数的时间。

https://www.w3schools.com/js/js_dates.asp

有很多方法可以将毫秒转换为天、小时、分钟和秒。要转换为月或年,数学会变得很不稳定,因为并非所有月都有相同的天数、闰年等。这是我拿起并使用的一个函数(我忘记了给出正确归属的来源)

function convertMS(ms) {
  var d, h, m, s;
  s = Math.floor(ms / 1000);
  m = Math.floor(s / 60);
  s = s % 60;
  h = Math.floor(m / 60);
  m = m % 60;
  d = Math.floor(h / 24);
  h = h % 24;
  return d + " days, " + h + " hours, " + m + " minutes, " + s + " seconds.";
};

document.getElementById("time").innerHTML = convertMS(8000000000);
<div id="time"></div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    相关资源
    最近更新 更多