如何使用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
:+ 1
在diff =
行末尾是因为您的“差异”是不寻常的,因为您计算了包括开始和结束的天数。这很奇怪,它会说从一个星期一到下一个星期一的天数相差 八,而不是七,因为它会计算任一端的星期一。但是你说:
例如,如果我将输入开始日期指定为 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中找到两个日期之间的给定天数? [复制]
如何获取 Oracle 11g 中两个日期之间的天数? [复制]