Javascript 如何从date from date now列表中查找下一个生日?

Javascript 如何从date from date now列表中查找下一个生日?,javascript,arrays,angular,Javascript,Arrays,Angular,我在为这个问题挣扎?如何从日期列表中找到下一个生日日期? 我得到 但我先抓到Sam是因为他抓到了1992。。但我想先展示1991年2月26日星期四 更新 我的解决方案: sortByDateNoYear(adate, bdate) { let results; const lhdate = moment(adate.birthdayDate); const rhdate = moment(bdate.birthdayDate);

我在为这个问题挣扎?如何从日期列表中找到下一个生日日期? 我得到

但我先抓到Sam是因为他抓到了1992。。但我想先展示1991年2月26日星期四

更新 我的解决方案:

    sortByDateNoYear(adate, bdate) {
        let results;
        const lhdate = moment(adate.birthdayDate);
        const rhdate = moment(bdate.birthdayDate);
        results =
          lhdate.month() > rhdate.month()
            ? 1
            : lhdate.month() < rhdate.month()
            ? -1
            : 0;
        if (results === 0) {
          results =
            lhdate.date() > rhdate.date()
              ? 1
              : lhdate.date() < rhdate.date()
              ? -1
              : 0;
        }
        return results;
      }
 [array].sort(this.sortByDateNoYear);

您当前正在使用.getUTCDate按月份的日期进行排序

相反,在比较中使用.getTime

getTime方法返回自Unix纪元以来的毫秒数*

此外,如果您使用的是Angular函数,则可以安全地使用arrow函数

myArray.sort((a, b) => {
  const dateA = new Date(a.date);
  const dateB = new Date(b.date);
  return dateA.getTime() - dateB.getTime();
});

您当前正在使用.getUTCDate按月份的日期进行排序

相反,在比较中使用.getTime

getTime方法返回自Unix纪元以来的毫秒数*

此外,如果您使用的是Angular函数,则可以安全地使用arrow函数

myArray.sort((a, b) => {
  const dateA = new Date(a.date);
  const dateB = new Date(b.date);
  return dateA.getTime() - dateB.getTime();
});

您需要为所有日期设置同一年,为已过的生日设置下一年。然后你可以比较

myArray.sort(function compare(a, b) {
          const now = new Date();
          const dateA = new Date(a.date);
          dateA.setYear(now.getFullYear());
          if (dataA.getTime() - now.getTime() < 0) { 
             dateA.setYear(now.getFullYear() + 1)
          }
          const dateB = new Date(b.date);
          dateA.setYear(new Date().getFullYear());
          dateA.setYear(now.getFullYear());
          if (dataB.getTime() - now.getTime() < 0) { 
             dateB.setYear(now.getFullYear() + 1)
          }
          return dateA.getTime() - dateB.getTime();
        });

您需要为所有日期设置同一年,为已过的生日设置下一年。然后你可以比较

myArray.sort(function compare(a, b) {
          const now = new Date();
          const dateA = new Date(a.date);
          dateA.setYear(now.getFullYear());
          if (dataA.getTime() - now.getTime() < 0) { 
             dateA.setYear(now.getFullYear() + 1)
          }
          const dateB = new Date(b.date);
          dateA.setYear(new Date().getFullYear());
          dateA.setYear(now.getFullYear());
          if (dataB.getTime() - now.getTime() < 0) { 
             dateB.setYear(now.getFullYear() + 1)
          }
          return dateA.getTime() - dateB.getTime();
        });

你可以这样试试

常量myArray=[{ 名字:'乔吹', 日期:1992年11月25日星期三 }, { 名字:'山姆笑', 日期:1992年4月16日星期四 }, { 名字:“伊娃lol”, 日期:一九九一年二月二十六日(星期四) } ]; myArray.sorta,b=>{ const ad=new Datea.date.getTime; const bd=new Dateb.date.getTime; 返回ad-bd; }; //console.logthis.usersBirthdayDate;
console.logmyArray 你可以这样试试

常量myArray=[{ 名字:'乔吹', 日期:1992年11月25日星期三 }, { 名字:'山姆笑', 日期:1992年4月16日星期四 }, { 名字:“伊娃lol”, 日期:一九九一年二月二十六日(星期四) } ]; myArray.sorta,b=>{ const ad=new Datea.date.getTime; const bd=new Dateb.date.getTime; 返回ad-bd; }; //console.logthis.usersBirthdayDate;
console.logmyArray;方法.getTime在功能上等同于此方法的.valueOfThis工作,但如果您有一个带有“1998年2月26日,星期四”的方法,它将不再作为except@Seysay对的这个答案是关于如何使用日期进行排序,而不是如何将字符串转换为日期。这就是为什么我要在数组中添加如下内容:{name:'Anna',birthdayDate:'thresday,二月二十六日'}它将不再工作,我是指函数或方法。getTime在功能上等同于。以这种方式工作的值,但如果你有一个“2月26日,星期四,1998年“它不会再像现在这样工作了except@Seysay对的这个答案是关于如何使用日期进行排序,而不是如何将字符串转换为日期。这就是为什么我要在数组中添加如下内容:{name:'Anna',birthdayDate:'thresday,二月二十六日'}它将不再工作,我的意思是该功能只是一个提示->新日期a.date;使用“1992年11月25日星期三”不是标准,在大多数情况下可能有效,但这取决于浏览器对日期字符串的解释。。相反如果你收到的邮件中没有一封解决了你的问题,你也可以接受它;使用“1992年11月25日星期三”不是标准,在大多数情况下可能有效,但这取决于浏览器对日期字符串的解释。。相反如果你收到的信中没有一个能解决你的问题,你也可以接受它。