首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript天数介于2个日期之间返回错误

Javascript天数介于2个日期之间返回错误
EN

Stack Overflow用户
提问于 2016-02-05 09:45:13
回答 3查看 794关注 0票数 2

我试图解决这个问题已经有一段时间了,但没有成功,我在这里找到了几个类似的答案,但格式才是这里最重要的。我需要返回X年,X月,X天。

你能帮我看看,我做错了什么吗?天数不太正确。

这是一个bin

代码语言:javascript
复制
function inBetweenDays(y,m,d){

var user_date = new Date(y,m + 1,d);
var today_date = new Date();

  
var diff_date = (user_date - today_date);

var num_years = diff_date/31536000000;
var num_months = (diff_date % 31536000000)/2628000000;
var num_days =  ((diff_date % 31536000000) % 2628000000)/86400000;
 
var years = Math.floor(Math.abs(num_years));
var months = Math.floor(Math.abs(num_months));  
var days =  Math.floor(Math.abs(num_days));
  
  if (years >= 1) {
    console.log(years + " years " + months + " months " + days + " days");
  } else if (years <= 0 && months >= 0){
     console.log(months + " months " + days + " days");
   } else {
     console.log(days + " days ");
   }
  
  }
  

inBetweenDays(2015,03,04);
inBetweenDays(2016,03,04);
inBetweenDays(2016,02,04);
inBetweenDays(2018,02,04);

EN

回答 3

Stack Overflow用户

发布于 2016-02-05 12:31:11

根据年、月、日计算两个日期之间的日历日期差的算法如下:

  1. 验证日期为整年(4位数字),月份在1-12范围内,月-日在1-年月日范围内。
  2. 从较晚日期天数中减去较早日期天数。如果需要借用,则将较早日期的月份中的天数、较早日期的年份中的天数添加到较晚日期天数中,并将1个月添加到较晚日期月份的subtracted.
  3. subtract中。如果需要借用,则将12个月添加到较晚日期月份,并将1年添加到较晚日期年份的subtracted.
  4. subtract较早日期年。

这可能已经在一系列重复问题中的一个现有答案中实现了,但尝试在没有算法文档的情况下发现它。借用天数的计算方法如下:

代码语言:javascript
复制
function monthDays(y, m)    // full year and month in range 1-12
{   var leap = 0;
    if( m == 2)
    {   if( y % 4 == 0) leap = 1;
        if( y % 100 == 0) leap = 0;
        if( y % 400 == 0) leap = 1;
    }
    return [0, 31,28,31,30,31,30,31,31,30,31,30,31][ m] + leap;
}

(编辑)或根据注释,使用Date对象的行为调整为超出预期的行为:

代码语言:javascript
复制
function monthDays( y, m)
{ return new Date(y, m, 0).getDate();
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-05 12:21:52

HTML

代码语言: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>

JavaScript

代码语言:javascript
复制
function parseDate(str) {
    var mdy = str.split('/')
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daydiff(first, second) {
    return Math.round((second-first)/(1000*60*60*24));
}

来源:How do I get the number of days between two dates in JavaScript?

票数 0
EN

Stack Overflow用户

发布于 2016-02-05 12:41:14

代码语言:javascript
复制
function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24;

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms);

    // Convert back to days and return
    return Math.round(difference_ms / ONE_DAY);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35214968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档