Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在忽略年份值的情况下比较momentJS的两个日期?_Javascript_Datetime_Momentjs - Fatal编程技术网

Javascript 如何在忽略年份值的情况下比较momentJS的两个日期?

Javascript 如何在忽略年份值的情况下比较momentJS的两个日期?,javascript,datetime,momentjs,Javascript,Datetime,Momentjs,假设一个任期从2015年11月1日开始到2016年1月3日。要比较的样本日期如下(“YYYY-MM-DD”): 有没有一种方法可以通过MomentJS实现这个结果?可以使用,但有点混乱 function isWithinTerm(dateString) { var dateFormat = '____-MM-DD', // Ignore year, defaults to current year begin = '2015-10-31', // Subtract one day

假设一个任期从2015年11月1日开始到2016年1月3日。要比较的样本日期如下(“YYYY-MM-DD”):

有没有一种方法可以通过MomentJS实现这个结果?

可以使用,但有点混乱

function isWithinTerm(dateString) {
  var dateFormat = '____-MM-DD', // Ignore year, defaults to current year
      begin = '2015-10-31', // Subtract one day from start of term
      end = '2016-01-04', // Add one day to finish of term
      mom = moment(dateString, dateFormat); // Store to avoid re-compute below
  return mom.isBetween(begin, end) || mom.add(1, 'y').isBetween(begin, end);
}
我之所以增加一年作为可选支票,是因为2015年1月以来的1月案例显然不是在2015年11月和2016年1月之间。我知道这有点老套,但我想不出更简单的方法。它的工作原理如下:

var矩=[
'2015-10-12',
'2015-11-01',
'2015-12-20',
'2015-01-03',
'2016-01-30',
'2017-11-21',
'2010-12-20'];
var边界=[时刻('2015-11-01')。减去(1,'天'),时刻('2016-01-03')。加上(1,'天')];
for(瞬间变量i){
res=力矩[i]+':';
如果(
矩(矩[i]).year(边界[0].year()).IsBeween(边界[0],边界[1])||
矩(矩[i]).year(边界[1].year()).isBetween(边界[0],边界[1])
){
res+=‘真’;
}
否则{
res+=‘假’;
}
$('').text(res).appendTo($('body');
}
编辑:如果上边界不是比下边界早一年而是早两年(或更长),只要稍作改动,它甚至会起作用

for (var i in moments){
    res = moments[i] + ': ';
    if (
        moment(moments[i]).year(boundaries[0].year()).isBetween(boundaries[0], boundaries[1]) ||
        moment(moments[i]).year(boundaries[0].year()+1).isBetween(boundaries[0], boundaries[1])

       ){
        res += 'true';
    }
    else{
        res += 'false';
    }
    $('<div/>').text(res).appendTo($('body'));
}
for(以瞬间为单位的变量i){
res=力矩[i]+':';
如果(
矩(矩[i]).year(边界[0].year()).IsBeween(边界[0],边界[1])||
矩(矩[i]).year(边界[0].year()+1).isBetween(边界[0],边界[1])
){
res+=‘真’;
}
否则{
res+=‘假’;
}
$('').text(res).appendTo($('body');
}

最简单的解决方案是测试目标日期是否在范围内,如果在范围内,则返回true,否则将目标日期的年份(您可能希望使用它的副本)设置为2015年,测试它是否在范围内,如果在范围内,则返回true,否则,将年份设置为2016年,测试它是否在范围内,如果在范围内,则返回true,否则返回错误,谢谢您的反馈。当我在日历中使用它时,我会对每个用户查询进行多次比较。我只是想知道是否还有另外一种方法。有一个anwser使用
“\uuuuuuuuuuuuuuu-MM-DD”
格式忽略年份,并使用
isBetween()
进行比较。我想知道为什么那个人删除了他的帖子,这个解决方案是有效的。我在删除之前测试了代码:@ShanShan。。。我也看到了,我想知道这是否真的有效。我想只有在边界没有不同年份的情况下,它才会起作用。如果它能在不同的年份工作,该方法总是会得到积极的结果。我想,这就是它被拿走的原因down@ShanShan这是因为它没有正确处理一月的日期。忽略该年度将意味着2017-01-03默认为2015-01-03,不在2015-11-01至2016-01-03的范围内。不过我已经修复了,下面是更新后的答案。谢谢你在momentJS中指出了“_u”语法。直到现在我才意识到这一点,这可能对我的其他约会操作有用:)
var moments = [
'2015-10-12',
'2015-11-01',
'2015-12-20',
'2015-01-03',
'2016-01-30',
'2017-11-21',
'2010-12-20'];

var boundaries = [moment('2015-11-01').subtract(1, 'days'),moment('2016-01-03').add(1, 'days')];

for (var i in moments){
    res = moments[i] + ': ';
    if (
        moment(moments[i]).year(boundaries[0].year()).isBetween(boundaries[0], boundaries[1]) ||
        moment(moments[i]).year(boundaries[1].year()).isBetween(boundaries[0], boundaries[1])

       ){
        res += 'true';
    }
    else{
        res += 'false';
    }
    $('<div/>').text(res).appendTo($('body'));
}
for (var i in moments){
    res = moments[i] + ': ';
    if (
        moment(moments[i]).year(boundaries[0].year()).isBetween(boundaries[0], boundaries[1]) ||
        moment(moments[i]).year(boundaries[0].year()+1).isBetween(boundaries[0], boundaries[1])

       ){
        res += 'true';
    }
    else{
        res += 'false';
    }
    $('<div/>').text(res).appendTo($('body'));
}