如何找出日和月之间的天数差异,无论年数如何

时间:2015-01-05 16:52:04

标签: javascript date momentjs

我想知道两个日期之间的区别,无论年份如何......

例如:格式日期/月/年

例如,今天日期与某个日期的差异可以采取01/06

对此的预期答案将是大约185天..

我试过下面的例子。让我知道这个错误是什么

   var a = moment('06/01','M/D');
   console.log(a);
   var b = moment();
   console.log(b);

   var diffDays = b.diff(a, 'days');
   alert(diffDays);

我不想在最近使用momet.js。如果可以用javascript完成它对我这么好。

4 个答案:

答案 0 :(得分:3)

一个很好的技巧可能是将年份设置为始终相同。

   var a = moment('2015/06/01','Y/M/D');
   console.log(a);
   var b = moment().set('year', 2015);
   console.log(b);

   var diffDays = b.diff(a, 'days');
   alert(diffDays);

一般来说,关于你的问题的问题是如何应对闰年;脚本应该如何知道2/20和3/1之间的区别?你必须考虑如何解决这个问题。

答案 1 :(得分:1)

Barth Zaleweski是100%正常的。如果你想直接使用javascript:

    var today = new Date();
    var otherDate = new Date(today);

    otherDate.setMonth(5); // Set the month (on scale from 0 to 11)
    otherDate.setDate(1); // set day

    var seconds = (otherDate.getTime() - today.getTime()) / 1000;
    var minutes = seconds / 60;
    var hours = minutes / 60;
    var days = hours / 24;
    console.log(days);

也有设置小时/分钟/秒的方法,但是如果你不做任何事情,他们将与开始时相同,你显然可以在开始时间调用相同的方法如果你今天不想使用它。

答案 2 :(得分:0)

可以试试这个:

var str1 = '06/01', str2 = '02/28', d1, d2, diff;

function setDate(str, date) {
    var date = new Date(),
        dateParts = str.split('/'),
        monthIndex = parseInt(dateParts[0], 10) - 1,
        day = parseInt(dateParts[1], 10);

    date.setMonth(monthIndex);
    date.setDate(day);        
    return date
}

d1 = setDate(str1);
d2 = setDate(str2);
diff = Math.round(Math.abs((d1 - d2) / (24 * 60 * 60 * 1000)))
console.log(diff) // returns 93

舍入是由于夏令时(或一年中的其他区域时间变化)的差异导致返回的十进制值。

最好将UTC用于此

如果当前年份是闰年,日期跨越2月底,那么2月29日也将计算

DEMO

答案 3 :(得分:0)

如果是今年,那么我使用我一直在处理的图书馆(AstroDate)获得了147的差异,而这些图书馆并不依赖于javascript' { {3}}对象,它都是用纯数学完成的。



require.config({
    paths: {
        'astrodate': '//rawgit.com/Xotic750/astrodate/master/lib/astrodate'
    }
});

require(['astrodate'], function (AstroDate) {
    "use strict";
    
    var diff = new AstroDate("2015","6","1").jd() - new AstroDate("2015","1","5").jd();
  
    document.body.appendChild(document.createTextNode(diff));
});

<script src="http://requirejs.org/docs/release/2.1.8/minified/require.js"></script>
&#13;
&#13;
&#13;

如果是明年,这是闰年,那么我得到148

&#13;
&#13;
require.config({
    paths: {
        'astrodate': '//rawgit.com/Xotic750/astrodate/master/lib/astrodate'
    }
});

require(['astrodate'], function (AstroDate) {
    "use strict";

    var diff = new AstroDate("2016", "6", "1").jd() - new AstroDate("2016", "1", "5").jd();

    document.body.appendChild(document.createTextNode(diff));
});
&#13;
<script src="http://requirejs.org/docs/release/2.1.8/minified/require.js"></script>
&#13;
&#13;
&#13;