javascript - 计算两个给定日期之间天数的函数有时会产生不准确的结果
问题描述
我在函数之间有一个天数,它应该准确计算两个日期之间的天数,这里是代码:
function DaysBetween(str1, str2) {
var date1 = str1;
var date2 = str2;
date1 = date1.split("/");
date2 = date2.split("/");
var oneday = 24 * 60 * 60 * 1e3;
date1 = new Date(date1[2], date1[0], date1[1]);
date2 = new Date(date2[2], date2[0], date2[1]);
var diffDays = Math.round(Math.abs((date1.getTime() - date2.getTime()) / oneday));
if (diffDays == 0) {
diffDays = 1;
}
console.log(diffDays);
return diffDays;
}
DaysBetween("9/24/2019","10/1/2019")
这有时可以正常工作,但有时会给出不准确的天数。
例如,如果date1 = 09/24/2019
它date2 = 09/25/2019
返回“1”的正确答案,或者date1 = 09/24/2019
它date2 = 09/30/2019
返回 6 天的正确答案,但是如果我输入日期date1 = 09/24/2019
并且date2 = 10/01/2019
它返回“8 天”,它应该是 7。什么给出?
解决方案
在 JavaScript 中,如果未作为日期字符串提供,则月份从 0 开始。
例如,new Date(2019,0,1)
将返回2019 年 1 月 1 日并将返回 2019 年2new Date(2019,1,1)
月1 日
同时,new Date("2019/1/1")
将于2019 年 1 月 1 日返回
console.log(new Date(2019,0,1).toString())
console.log(new Date(2019,1,1).toString())
在您的代码中,它计算Oct 24, 2019和Nov 1, 2019之间的差异。10 月有 31 天,因此 8 是正确答案。要获得2019 年 9 月 24 日和 2019 年10月 1 日的差异,您需要从月份的值中减去 1。
您需要将代码更正为以下内容
date1 = new Date(date1[2], parseInt(date1[0])-1, date1[1]);
date2 = new Date(date2[2], parseInt(date2[0])-1, date2[1]);
function DaysBetween(str1, str2) {
var date1 = str1;
var date2 = str2;
date1 = date1.split("/");
date2 = date2.split("/");
var oneday = 24 * 60 * 60 * 1e3;
date1 = new Date(date1[2], parseInt(date1[0]) - 1, date1[1]);
date2 = new Date(date2[2], parseInt(date2[0]) - 1, date2[1]);
var diffDays = Math.round(Math.abs((date1.getTime() - date2.getTime()) / oneday));
if (diffDays == 0) {
diffDays = 1;
}
console.log(diffDays);
return diffDays;
}
DaysBetween("9/24/2019", "10/1/2019");
这是一个建议。你不需要所有这些行。这可以通过以下代码轻松完成
function dateDiff(d1,d2){
return (new Date(d2).getTime() - new Date(d1).getTime())/(1000 * 60 * 60 * 24);
}
它将获取 unix 时间戳中的时间,找出差异,然后将其除以1000 * 60 * 60 * 24以查找天数。
function dateDiff(d1,d2){
return (new Date(d2).getTime() - new Date(d1).getTime())/(1000 * 60 * 60 * 24);
}
console.log(dateDiff("2019/9/24","2019/10/1"));
推荐阅读
- javascript - React setState 实际上并没有改变状态
- python - 允许可选属性的 Python 协议
- python - 为什么我的学习曲线会出现峰值或波动?
- c++ - Rcpp:R::dbeta 的“没有上下文类型信息的重载函数”
- google-apps-script - 设置自动调整文本属性
- django - 卡在 DJango
- ruby - 发生 Ruby 异常:nil:NilClass 的未定义方法“split”
- python - 关闭客户端
- python - 有没有办法从 Django 中包含 HTML 标记的字符串将实际的 HTML 添加到模板中?
- reactjs - React Firebase 更新数据库