如何计算两个日期之间的天数?

2022-02-20 00:00:00 date javascript

例如,在输入框中给定两个日期:

<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

<script>
  alert(datediff("day", first, second)); // what goes here?
</script>

如何在JavaScript中获取两个日期之间的天数?


解决方案

这里是datediff的快速而肮脏的实现,作为解决问题中提出的问题的概念证明。它依赖于这样一个事实,即您可以通过减去两个日期之间经过的毫秒数,从而将它们强制转换为它们的原始数值(自1970年初以来的毫秒数)。

// new Date("dateString") is browser-dependent and discouraged, so we'll write
// a simple parse function for U.S. date format (which does no error checking)
function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function datediff(first, second) {
    // Take the difference between the dates and divide by milliseconds per day.
    // Round to nearest whole number to deal with DST.
    return Math.round((second-first)/(1000*60*60*24));
}

alert(datediff(parseDate(first.value), parseDate(second.value)));
<input id="first" value="1/1/2000"/>
<input id="second" value="1/1/2001"/>

您应该知道,"普通"日期API(名称中没有"UTC")在用户浏览器的本地时区运行,因此,如果您的用户所在的时区不是您所期望的,那么通常您可能会遇到问题,并且您的代码将不得不处理夏令时转换。您应该仔细阅读Date对象及其方法的文档,对于更复杂的情况,应强烈考虑使用提供更安全、更强大的API进行日期操作的库。

  • Numbers and Dates -- MDN JavaScript Guide
  • Date -- MDN JavaScript reference

此外,出于说明目的,代码段使用named access on the window object以求简洁,但在生产中,您应该使用像getElementById这样的标准化API,或者更有可能使用某种UI框架。

相关文章