首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找最接近用户下一个生日的日期

查找最接近用户下一个生日的日期
EN

Stack Overflow用户
提问于 2022-09-09 21:23:58
回答 2查看 76关注 0票数 0

如果我有一个未来日期对象的未排序数组,那么选择最接近用户下一个生日的日期的最佳方法是什么?例如,

代码语言:javascript
运行
复制
    const dates = [new Date(2023, 12, 23), 
                   new Date(2023, 12, 2), 
                   new Date(2023, 12, 6), 
                   new Date(2023, 10, 23), 
                   new Date(2023, 9, 10),
                   new Date(2023, 8, 1),
                   new Date(2023, 7, 4),
                   new Date(2023, 7, 7),
                   new Date(2023, 1, 1)]
    findClosestDate(new Date(1995, 10, 3)); // should return dates[3]
EN

回答 2

Stack Overflow用户

发布于 2022-09-09 21:28:47

代码语言:javascript
运行
复制
function findClosestDate(date) {
  const today = new Date()
  const nextDate = new Date(date)
  nextDate.setFullYear(today.getFullYear())
  if (nextDate < today) {
    nextDate.setFullYear(today.getFullYear() + 1)
  }
  console.log(nextDate)
  const dates = [
    new Date(2023, 12, 23),
    new Date(2023, 12, 2),
    new Date(2023, 12, 6),
    new Date(2023, 10, 23),
    new Date(2023, 9, 10),
    new Date(2023, 8, 1),
    new Date(2023, 7, 4),
    new Date(2023, 7, 7),
    new Date(2023, 1, 1)
  ]
  // calculate distance to each date
  const diffs = dates.map(d => Math.abs(nextDate - d))
  // find the lowest
  const best = Math.min(...diffs)
  // get the index of the lowest
  const bestIndex = diffs.indexOf(best)
  // return the best one
  return dates[bestIndex]
}
const result = findClosestDate(new Date(1995, 10, 3));
console.log(result)

票数 1
EN

Stack Overflow用户

发布于 2022-09-10 05:51:46

正如许多评论已经指出的那样,这个问题似乎有一些不确定因素或错误。我现在正试图以我理解OP的意图来回答这个问题:“在建议的日期中,哪一天最接近同一年的某一生日?”另外,我假设OP不知道new Date()中的月份计数器在JavaScript中是零的。因此,我手动调整了所有日期。

代码语言:javascript
运行
复制
 const dates = [
    new Date(2023, 11, 23),
    new Date(2023, 11, 2),
    new Date(2023, 11, 6),
    new Date(2023, 9, 23),
    new Date(2023, 8, 10),
    new Date(2023, 7, 1),
    new Date(2023, 6, 4),
    new Date(2023, 6, 7),
    new Date(2023, 0, 1)
  ], bd=new Date(1995, 9, 3); // 3 October 1995
// future birthday; 
const fbd=new Date(dates[0].getFullYear(),bd.getMonth(),bd.getDate());

const closest=dates.reduce((a,c)=>Math.abs(c-fbd)<Math.abs(a-fbd)?c:a);

console.log(closest.toLocaleString());

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73667607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档