Javascript 按即将到来的日期对日期为字符串的数组排序

Javascript 按即将到来的日期对日期为字符串的数组排序,javascript,arrays,vue.js,ecmascript-6,Javascript,Arrays,Vue.js,Ecmascript 6,因此,我尝试对数组进行排序,以便第一项与当前日期和月份或最近的条目相同 我的数组如下所示: [ [ "Firstname Lastname", "1979-01-03", "40" ], [ "Firstname Lastname", "1996-01-23", "23" ], [ "Firstname Lastname", "19

因此,我尝试对数组进行排序,以便第一项与当前日期和月份或最近的条目相同

我的数组如下所示:

[
    [
       "Firstname Lastname",
        "1979-01-03",
        "40"
    ],
    [
        "Firstname Lastname",
        "1996-01-23",
        "23"
    ],
    [
        "Firstname Lastname",
        "1977-01-28",
        "41"
    ],
    [
        "Firstname Lastname",
        "1983-03-11",
        "35"
    ],
    [
       "Firstname Lastname",
       "1977-03-30",
        "41"
    ],
    [
       "Firstname Lastname",
        "1975-05-08",
        "43"
    ]
]
我确实知道如何根据月份的日期对数组进行排序,但是它忽略了月份本身

relativeYearDay(date) {
    let differenceDay = new Date(date).getDate() - new Date().getDate();

     if (differenceDay < 0) {
         differenceDay += 365;
     }

     return differenceDay;
}

getUpcomingBirthdays() {
     return this.birthdays.slice(0).sort((a, b) => {
         return this.relativeYearDay(a[1]) - this.relativeYearDay(b[1]);
    });
},
relativeYearDay(日期){
让differenceDay=新日期(Date).getDate()-新日期().getDate();
如果(差异日<0){
差异日+=365;
}
返回不同的日期;
}
GetUpComing生日(){
返回此.birthdays.slice(0).sort((a,b)=>{
返回此.relativeYearDay(a[1])-此.relativeYearDay(b[1]);
});
},
就像我提到的那样,它返回一个基于月份日期的排序数组


我该如何在一天和一个月内做到这一点呢?

我误解了这个问题,以为你想要的是最接近当前日期的日期

在简单的编码中。。。可能会给你一些想法,把它变成一个排序程序

const数据=[
[
“Firstname Lastname”,
"1979-01-03",
"40"
],
[
“Firstname Lastname”,
"1996-01-23",
"23"
],
[
“Firstname Lastname”,
"1977-01-28",
"41"
],
[
“Firstname Lastname”,
"1983-03-11",
"35"
],
[
“Firstname Lastname”,
"1977-03-30",
"41"
],
[
“Firstname Lastname”,
"1975-05-08",
"43"
]
];
const now=new Date().getTime();
设nearestIndex=-1;
设最近值=0;
data.forEach((项目、索引)=>{
如果(最近的==0 | |现在是新日期(项目[1])。getTime()<最近的){
最近=现在新日期(项目[1])。getTime();
nearestIndex=指数;
}  
});

log(`最近的日期位于索引${nearestIndex}`,数据[nearestIndex],最近的,nearestIndex)您最初的答案非常接近。在排序时,您只需要计算出用户下一个生日的日期

const生日=[
[“姓氏”、“1979-01-03”、“40”],
[“名字”“姓氏”,“1996-01-23”,“23”],
[“姓氏”、“1977-01-28”、“41”],
[“姓氏”、“1983-03-11”、“35”],
[“姓氏”、“1977-03-30”、“41”],
[“姓”、“名”、“1975-05-08”、“43”]
];
函数getNextBirthday(日期){
//当前日期
让currentDate=新日期();
//将用户的生日设置为今年(最初为他们的出生年份)
让生日=新日期(日期);
生日.setFullYear(currentDate.getFullYear());
//如果今年已经过了生日,那么下一个生日就是明年。
如果(生日-当前日期<0){
生日.setFullYear(currentDate.getFullYear()+1);
}
//将用户的下一个生日作为日期返回。
回归生日;
}
函数getUpcomingBirthdays(){
返回生日。切片(0)。排序((a,b)=>{
返回getNextBirthday(a[1])-getNextBirthday(b[1]);
});
}

编辑:添加注释并修复代码中的小错误。

实际上,由于您希望按下一个生日排序,因此在与
当前日期进行比较时,您可以将当前年份设置为所有
日期。当两者之间的差值为负值(即生日已经发生)时,可以从现在开始添加1年的偏移量

const生日=[
[“姓氏”、“1979-01-03”、“40”],
[“名字”“姓氏”,“1996-01-23”,“23”],
[“姓氏”、“1977-01-28”、“41”],
[“姓氏”、“1983-03-11”、“35”],
[“姓氏”、“1977-03-30”、“41”],
[“姓”、“名”、“1975-05-08”、“43”]
];
功能距离第一天(日期)
{
设currDate=新日期();
currDate.setHours(0,0,0,0);
让currYear=currDate.getFullYear();
让偏移量=新日期();
偏移量设置小时数(0,0,0,0);
抵销。设置整年(当前年+1);
日期=新日期(日期+“00:00”);
日期。设置完整年份(当前年份);
设diff=日期-当前日期;
返回(diff<0)?diff+offset.getTime():diff;
}
函数GetUpComing生日(B天)
{
返回bdays.slice(0).sort(
(a,b)=>distanceToBirthday(a[1])-distanceToBirthday(b[1])
);
}

日志(getUpcomingBirthdays(birthdays))您可以通过带节的排序算法对数组进行排序,其中以日期作为分隔符,将较小的值移动到数组末尾,并按日期对所有其他值进行排序

这种方法使用部分字符串,因为日期可以按字符串排序

var数组=[“Firstname Lastname”、“1979-01-03”、“40”]、[“Firstname Lastname”、“1996-01-23”、“23”]、[“Firstname Lastname”、“1977-01-28”、“41”]、[“Firstname Lastname”、“1983-03-11”、“35”]、[“Firstname Lastname”、“1977-03-30”、“41”]、[“Firstname Lastname Lastname”、“1975-05-08”、“43”],
day=(新日期).toISOString().slice(5,10)
sort(({1:a},{1:b})=>
(a.slice(5)log(array.map(a=>a.join('|'))
那么您试图按日期对数组排序,而忽略年份?如果格式一致,只需切掉字符串的前5个字符(
“yyy-”
)并按剩余字符排序。将日期转换为时间戳并使用该时间戳进行排序。“Math.round(新日期(“2013/09/05 15:34:00”)。getTime()/1000)“最近的条目”是否向后看?也就是说,1月22日是距离1月23日最近还是最远的值?@TylerRoper如果在创建新日期对象时使用固定年份,则会是这样的……谢谢!这和@michael lynch的答案几乎是一样的!这很有道理,而且很有魅力。