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

Javascript 时刻JS:忽略年份的天数差异,javascript,node.js,date,momentjs,difference,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(

我熟悉如何在给定两个时刻对象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


将年份设置为相同似乎会导致问题。有什么解决方案吗?

手动实例化另一个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' ) );
}
var a=时刻(“2015年6月1日”),
b=力矩(“1992年6月5日”),
origDiff=Math.abs(a.diff(b,'days')),
最后一步;
如果(初始值小于60){
finalDiff=原始iff;
}否则{
b、 年份(a.year());
finalDiff=Math.abs(a.diff(b,“天”);
}

手动实例化另一个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' ) );
}
var a=时刻(“2015年6月1日”),
b=力矩(“1992年6月5日”),
origDiff=Math.abs(a.diff(b,'days')),
最后一步;
如果(初始值小于60){
finalDiff=原始iff;
}否则{
b、 年份(a.year());
finalDiff=Math.abs(a.diff(b,“天”);
}

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

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);

我认为这足以让你开始

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

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);

我认为这足以让你开始

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

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

比如说,我想知道今天的日期是否介于万圣节期间,无论是哪一年:

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


从2月28日到3月1日之间有多少天?@Satpal这会起作用,因为如果你有2015年12月28日和1992年1月10日,在我看来,如果你需要从2016年12月25日到2017年1月5日平稳计算,那么你就不会“忽略这一年”;在这种边缘的情况下,我会以某种方式使用两个日期上的实际年份,并进行常规差异。也许会进行一次有条件的差异检查,如果差异小于365天,则使用原始年份恢复差异。因此,年份确实重要,正如问题的更新所指出的那样。您需要提供一个处理该问题的算法,或者等待人们猜测一个合适的算法。例如,如果闰年…如果开始年份在结束年份之前,但开始月份在结束月份之后…等等。在我看来,你似乎想要一个类似的答案,然后将月份转换为天,忽略年份(尽管你仍然需要计算二月是28天还是29天)。还有很多。从2月28日到3月1日之间有多少天?@Satpal这会起作用,因为如果你有2015年12月28日和1992年1月10日,在我看来,如果你需要从2016年12月25日到2017年1月5日平稳计算,那么你就不会“忽略年份”;在这种边缘的情况下,我会以某种方式使用两个日期上的实际年份,并进行常规差异。也许会进行一次有条件的差异检查,如果差异小于365天,则使用原始年份恢复差异。因此,年份确实重要,正如问题的更新所指出的那样。您需要提供一个处理该问题的算法,或者等待人们猜测一个合适的算法。例如,如果闰年…如果开始年份在结束年份之前,但开始月份在结束月份之后…等等。在我看来,你似乎想要一个类似的答案,然后将月份转换为天,忽略年份(尽管你仍然需要计算二月是28天还是29天)。还有很多。这会包括一个物体在十二月,另一个在另一年的一月吗?是的。diff方法可以返回一个负值,因此在上面更新的diff的返回值上使用Math.abs来包含一个打破这一点的场景。任何帮助都会很感激,这是否包括一个物体在12月,另一个在另一年的1月?是的。diff方法可以返回一个负值,因此在上面更新的diff的返回值上使用Math.abs来包含一个打破这一点的场景。任何帮助都是值得感激的,一年中并不总是365天。什么时候开始计算闰年呢?年底?仅当日期为2月28日或29日时?(这些是关于OP的更多问题…)。正如我在回答中所说的,我认为很明显,这是一个很容易出错的问题。但是如果他问的话