如何在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>
这里有一个快速和肮脏的实现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"/>
<!--结束片段-->。
你应该知道,正常的Date API(名称中没有"UTC")是在用户浏览器的本地时区运行的,所以一般来说,如果你的用户所在的时区不是你期望的,你可能会遇到问题,你的代码将不得不处理夏令时的转换。你应该仔细阅读Date对象及其方法的文档,对于任何更复杂的事情,强烈考虑使用一个为日期操作提供更安全和强大的API的库。
另外,为了说明问题,该片段使用了对window
对象的命名访问,以达到简洁的目的,但在生产中你应该使用标准化的API,如getElementById,或者更可能使用一些UI框架。</sub>。
我会继续前进,抓住这个小工具,在其中你会发现对你来说的功能。这里有一个简短的例子。
<script type="text/javascript" src="date.js"></script>
<script type="text/javascript">
var minutes = 1000*60;
var hours = minutes*60;
var days = hours*24;
var foo_date1 = getDateFromFormat("02/10/2009", "M/d/y");
var foo_date2 = getDateFromFormat("02/12/2009", "M/d/y");
var diff_date = Math.round((foo_date2 - foo_date1)/days);
alert("Diff date is: " + diff_date );
</script>