使用Javascript计算两个日期之间的持续时间

我基本上想要两个日期,即:

 var startDate = new Date("01/01/2001 01:00:00");
 var currentDate = new Date();

然后我想通过从currentDate中减去startDate来获得持续时间,并以以下形式显示它:a b b(s)c day(s)d hour(s)e second(s).

到目前为止我的问题是如果你采用捷径,即:

var duration = currentDate.getTime() - startDate.getTime();
var seconds = duration / 1000;
var minutes = duration / 1000 / 60;

等等…

然后你得到一个错误的持续时间,因为,例如,几个月并不总是30天,年数并不总是365天(闰年),等等.更何况,当我这样做时它已经大约一年了.

我已经浏览了网络并通过StackOverflow上的各种帖子,但我找不到一个JavaScript方法的工作示例,它准确地从另一个日期中减去一个日期并允许您获取详细信息(年,月,日,小时,分钟) ,第二)从结果日期开始.

有一个网站已经可以完全按照我的要求做到这一点:http://www.timeanddate.com

最佳答案 如果你想要一个“正确”的结果,因为几个月有不同的天数,这个问题没有明显的简单解决方案.

但与此同时,人类的大脑在大日期范围内变得越来越邋..所以“1年11个月”几乎与“近两年”一样好.因此,在开始使用100%正确的解决方案之前,请先问问自己,假装结果是否足够好,只需使用30天.

如果真的不是一个选择:摆脱小时和分钟;他们只会让人困惑.创建两个日期,这两个日期都从午夜开始(即HH:MM:SS是00:00:00).

现在的问题是他们之间有多少天,几个月和几年?那要看. 6月1日和8月31日之间的时间差不多是两个月,但两个日期之间没有一个月.这是61天,0个月.还是1个月,30天?哪个是对的”?

数学正确的解决方案将为您提供多达61天差异的结果,用户会发现这些差异令人恼火.

人类解决方案在数学上并不正确,因此您最终必须编写假设人类时间感的启发式方法.

这就是为什么这么多网站说“超过一个月”如果有些日期差异超过30天并继续“半年”,“一年”(330至380天之间)和“超过一年” “等等.他们利用邋human的人脑来取代他们的利益,而不是试图想出一个”确切的“结果(a)也没有真正帮助b)没有人真正同意”精确“应该是什么意思).

点赞