我很熟悉如何找到给定两个时刻对象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
将年份设置为相同会导致出现问题。任何解决方案?
答案 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