Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在年、月、日中获得两个日期的差异,但答案总是以几天/月为准_Javascript_Date_Math - Fatal编程技术网

Javascript 在年、月、日中获得两个日期的差异,但答案总是以几天/月为准

Javascript 在年、月、日中获得两个日期的差异,但答案总是以几天/月为准,javascript,date,math,Javascript,Date,Math,所以我想做一个简单的计数器。我主要是想找出2011年6月5日00:00:00日期和现在的区别。然后以年月日时分秒的格式显示此日期 我去计算差额。这个网站非常可靠,它告诉我差别是7年9个月11天20小时38分4秒。但是我的代码告诉我它的7年9个月13天。我做错了什么&我怎样才能纠正它?现在有没有为我计算所有这些的函数 //开始日期 var startDate=新日期(“2011年6月5日00:00:00”).getTime(); //每1秒更新一次倒计时 var x=setInterval(

所以我想做一个简单的计数器。我主要是想找出2011年6月5日00:00:00日期和现在的区别。然后以
年月日时分秒
的格式显示此日期

我去计算差额。这个网站非常可靠,它告诉我差别是7年9个月11天20小时38分4秒。但是我的代码告诉我它的
7年9个月13天。我做错了什么&我怎样才能纠正它?现在有没有为我计算所有这些的函数


//开始日期 var startDate=新日期(“2011年6月5日00:00:00”).getTime(); //每1秒更新一次倒计时 var x=setInterval(函数(){ //获取今天的日期和时间 var now=new Date().getTime(); //查找从开始日期到现在已经有多长时间了 变量距离=(现在-起始日期); //时间计算 变量年份=数学楼层(距离/31536000000); var月数=数学下限((距离%31536000000)/2628000000); 变量天数=数学下限((距离%31536000000)%2628000000)/86400000); //在id=“demo”的元素中输出结果 document.getElementById(“demo”).innerHTML=years+“years”,“months+“months”,“days+“days”; }, 1000);
您的逻辑错误。 您的逻辑仅在没有闰年的年份有效,因为闰年包含额外的一天。
在你的问题中,出现了两个闰年。所以一年中不一定有365天会出现两次差异。与您所指的网站相比,还有另一个区别:

通常当人们说“今天正好是一个月前”时,他们的意思是这是同一个月的日期。3月14日正好是2月14日之后的一个月,4月14日正好是3月14日之后的一个月。这意味着“月”的长度取决于你的参考点。在本例中,第一个差值为28天(非闰年),而第二个差值为31天

使用以下代码可以实现与您在网站上获得的结果接近的解决方案:

函数dateDiff(a,b){ //一些实用功能: 常量getSecs=dt=>(dt.getHours()*24+dt.getMinutes())*60+dt.getSeconds(); 常量getMonths=dt=>dt.getFullYear()*12+dt.getMonths(); //0.转换为新的日期对象以避免副作用 a=新日期(a); b=新日期(b); 如果(a>b)[a,b]=[b,a];//按顺序交换 //1.获取一天中秒数的差异: 设diff=getSecs(b)-getSecs(a); 如果(差异<0){ b、 setDate(b.getDate()-1);//返回一天 diff+=24*60*60;//补偿一天 } //2.获得当月天数的差异 设天数=b.getDate()-a.getDate(); 如果(天数<0){ b、 setDate(0);//返回上个月的最后一天 天数+=b.getDate();//补偿相当于一个月 } //3.获得月数差异 常量月份=计算月份(b)-计算月份(a); 返回{ 年份:数学楼层(月/12), 月数:月数%12, 天, 时间:数学楼层(差异/3600), 会议记录:数学地板(差异/60)%24, 秒:差异%60 }; } //开始日期 var startDate=新日期(“2011年6月5日00:00:00”); //每1秒更新一次计数 setInterval(函数(){ const diff=dateDiff(开始日期,新日期); const str=Object.entries(diff.map)([name,value])=> 值>1?值+“”+名称:值?值+“”+名称.切片(0,名称.长度-1):“” ).filter(布尔值).join(“,”)| |“0秒”; document.getElementById(“demo”).textContent=str; }, 1000);
忘记闰年错误在于您的计算缺少闰年years@sferret我怎么计算呢?@Paul@sferret基本上是加起来的,一年有365.25天。这是不准确的。“根本没有办法获得一致的输出”,事实上。在为日期制定规则时,如何处理异常情况,例如2月29日出生的人什么时候过生日,始终是一个商业决定?一些人在非闰年使用2月28日,其他人使用3月1日。同样,5月31日至6月30日可能是一个月,但6月30日至7月30日可能不是,因此“月末”处理可能发生在该月的最后一天,而不是特定的重复日期。:-)