如何使用javascript查找两个日期之间的天数差异

Posted

技术标签:

【中文标题】如何使用javascript查找两个日期之间的天数差异【英文标题】:How to find Days difference between two dates using javascript 【发布时间】:2014-12-17 11:44:34 【问题描述】:

我需要使用 javascript 查找两个日期之间的天数差异,这是我的代码

我有开始日期和结束日期

var diff = Math.floor((Date.parse(enddate) - Date.parse(startdate)) / 86400000);

它计算与当前时间的差异。我需要找出给定日期之间的日期数。

例如,如果我将输入开始日期指定为 17-dec-2014 和 19-dec-2014 它显示两天,但我需要计算天数 17,18 和 19。它应该显示天数为三天.

有人帮帮我吗?

【问题讨论】:

这个差+1会给你结果吗? 我已经更新了你的问题和标签——这里没有 jQuery。 可能重复:***.com/questions/3224834/… 【参考方案1】:

您可以在进行比较之前将小时、分钟、秒和毫秒设置为 0,以忽略一天中的时间,例如:

var startdate = "2014-12-17";
var enddate = "2014-12-19";
var start = new Date(startdate);
start.setHours(0, 0, 0, 0); // Sets hours, minutes, seconds, and milliseconds
var end = new Date(enddate);
end.setHours(0, 0, 0, 0);
var diff = Math.round((end - start) / 86400000) + 1; // See note below re `+ 1`
snippet.log("diff = " + diff); // 3
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

对此有两个注意事项:

    Math.round:这是因为如果时间跨度超过夏令时边界,数字将偏离一小部分,但在四舍五入校正它的范围内。请注意,您必须取整,而不是截断、地板、天花板。

    + 1+ 1diff = 行末尾是因为您的“差异”是不寻常的,因为您计算了包括开始和结束的天数。这很奇怪,它会说从一个星期一到下一个星期一的天数相差 ,而不是七,因为它会计算任一端的星期一。但是你说:

    例如,如果我将输入开始日期指定为 17-dec-2014 和 19-dec-2014 显示两天,但我需要计算 17,18 和 19 天数。

    ...所以你需要+ 1。两个日期之间的正常差异不会有它。

跨 DST 边界的示例(在许多时区中):

var start, end, diff;

start = new Date(2014, 2, 1); // March 1st 2014
end   = new Date(2014, 5, 1); // May 1st 2014
diff = ((end - start) / (1000 * 3600 * 24)) + 1;
// diff won't *quite* be 93, because of the change to DST
// (assuming a timezone where DST changes sometime in
// March, as in most parts of the U.S., UK, and Canada
snippet.log("diff = " + diff + " instead of 93");
snippet.log("rounded = " + Math.round(diff));

// Similarly, at the other end:
start = new Date(2014, 9, 1);  // October 1st 2014
end   = new Date(2014, 11, 1); // December 1st 2014
diff = ((end - start) / (1000 * 3600 * 24)) + 1;
// diff won't *quite* be 62, because of the change to DST
// (assuming a timezone where DST changes sometime in
// March, as in most parts of the U.S., UK, and Canada
snippet.log("diff = " + diff + " instead of 62");
snippet.log("rounded = " + Math.round(diff));
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

这就是让我转向像MomentJS 这样的库的原因。使用 MomentJS,它将是:

var diff = moment(enddate).diff(moment(startdate), 'days') + 1;

...+ 1 又是因为您对两个日期之间的差异的不同寻常的定义。

【讨论】:

以上是关于如何使用javascript查找两个日期之间的天数差异的主要内容,如果未能解决你的问题,请参考以下文章

如何在Javascript中找到两个日期之间的给定天数? [复制]

如何计算两个日期之间的天数? [复制]

查找以 m/d/Y 格式存储的两个日期之间的天数 [重复]

如何获取 Oracle 11g 中两个日期之间的天数? [复制]

如何计算 Postgres 中两个日期之间除星期日以外的天数?

收集两个日期之间的天数[重复]