怎么获取距离当前日期最近的未来日期数组下标

["2017-07-10", "2017-07-13", "2017-08-24", "2017-08-31", "2017-09-13", "2017-11-01"]

这是数组格式 ,怎么才能拿到距离当前日期最近的未来日期数组下标?比如现在是9.3号 我应该拿到的是 9.13对应的下标

阅读 4.3k
4 个回答

把值转为时间搓,与当前时间比对,取相差值最小的正值的下标

var dateArr = ["2017-07-10", "2017-07-13", "2017-08-24", "2017-08-31", "2017-09-13", "2017-11-01"]

// 方法一
function getIndexOfLatestDate(dateArr) {
    var minMs = new Date(dateArr[0]).getTime() - new Date().getTime()
    var index = 0
    for (let i in dateArr) {
        var ms = new Date(dateArr[i]).getTime() - new Date().getTime()
        if (ms > 0 && ms < minMs) {
            minMs = ms
            index = i
        }
    }

    return parseInt(index)
}

// 方法二
function getIndexOfLatestDate2(dateArr) {
    var newDateArr = [...dateArr]
    var now = new Date()
    var todayStr = now.getFullYear().toString() 
                    + '-' 
                    + ('0' + (now.getMonth() + 1)).substr(-2) 
                    + '-' 
                    + ('0' + now.getDate()).substr(-2) 
    newDateArr.push(todayStr)
    newDateArr.sort()
    var latestDate = newDateArr[newDateArr.indexOf(todayStr) + 1]
    return dateArr.indexOf(latestDate)
}

getIndexOfLatestDate2(dateArr)

arr.forEach((item, index) => {
//找到你这里要的9.13
//forEach是会遍历到数组结束的,不想浪费这点时间可以直接for循环
return index
})

转出完整的毫秒时间

var dates = ["2017-07-10", "2017-07-13", "2017-08-24", "2017-08-31", "2017-09-13", "2017-11-01"];
for (var x in dates){
    if((new Date(dates[x]).getTime())>=(new Date().getTime())){
        console.log(x);
        break;
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题