片刻JS:忽略年份的天数差异

时间:2016-05-04 22:35:14

标签: javascript node.js date momentjs difference

我很熟悉如何找到给定两个时刻对象a和b的两个日期的差异:

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

我遇到的问题是忽略了这一年。我只希望片刻a和b能够找到不同年份的天数差异。

示例:

a = June 1, 2015
b = June 5, 1992 //desired outcome 4. Not 4 + 4*365

let diffDays = a.diff(b, 'days')

我将如何解决这个问题?

更新

打破大多数答案的方案如下:

let c = moment( "January 5, 2015" );
let d = moment( "December 25" ).year( c.year() );
console.log(Math.abs( c.diff( d, 'days' ) ));

输出:354 期望:11

将年份设置为相同会导致出现问题。任何解决方案?

3 个答案:

答案 0 :(得分:1)

手动实例化另一个momentjs实例,仅重用第一个日期的月份和日期,而不是第二个日期的年份。然后调用你的diff方法。

var a = moment( "June 1, 2015" ),
    b = moment( "June 5, 1992" ),
    origDiff = Math.abs( a.diff( b, 'days' ) ),
    finalDiff;

if ( origDiff < 60 ) {

    finalDiff = origDiff;

} else {

    b.year( a.year() );
    finalDiff = Math.abs( a.diff( b, 'days' ) );
}

答案 1 :(得分:1)

您只需将两个日期的年份设置为同一年。这是一个例子:

var a = moment("June 1, 2015");
var b = moment("June 5, 1992");

a.year(2000);
b.year(2000);

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

我选择2000作为随机年份数字,选择你想要的任何东西。

你也可以将b年设置为这样的一年:

b.year(a.year());

如果你想要绝对差异而不是负数或正数差,请使用Math.abs:

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

<强>更新

对于第二个例子。这相对容易:

var c = moment( "January 5, 2015" );
var d = moment( "December 25, 2014" )
if (c > d)
    c.year( d.year() + 1 );
 else
    c.year( d.year() );
 console.log(Math.abs( c.diff( d, 'days' ) ));

但是你看到这需要...你怎么知道你想要一年中的一个日期和另一个日期?你必须建立某种规则。

例如,如果您不需要确切的结果,也许您可​​以确定如果差异大于1/2一年,您会认为它来自明年。像这样:

var c = moment( "January 5, 2015" );
var d = moment( "December 25, 2014" )
c.year( d.year() );
var dif = Math.abs( c.diff( d, 'days' ) );
if (dif > (365/2))  c.year( d.year() + 1 );
dif = Math.abs( c.diff( d, 'days' ) );

console.log(dif);

我认为这足以让你入门。 :)

答案 2 :(得分:0)

假设我想知道今天的日期是否在万圣节期间,无论是哪一年:

const now = moment() // 31/10/2017
const begin = moment('15/10/____', 'DD/MM/____') // begin
const end = moment('15/11/____', 'DD/MM/____') // end
now.isBetween(begin, end, 'days', '[]') // true