如何使用 date-fns 找到一周中最近的一天

Posted

技术标签:

【中文标题】如何使用 date-fns 找到一周中最近的一天【英文标题】:How to find the nearest day of the week with date-fns 【发布时间】:2019-06-06 03:10:58 【问题描述】:

我希望能够使用 date-fns 根据当前日期找出过去一周中最近的一天。假设我需要根据当前日期查找过去最近的星期五、星期三、星期四等。

我查看了文档,只能看到这两个方法 https://date-fns.org/docs/closestTo 和 https://date-fns.org/v1.29.0/docs/getDay,我认为它们可能会有所帮助,但我正在寻找的方法却不见了。

有什么想法吗?

【问题讨论】:

【参考方案1】:
const  getISODay, addDays  = require('date-fns');

function getClosestDayOfLastWeek(dayOfWeek, fromDate = new Date()) 
    // follow the getISODay format (7 for Sunday, 1 for Monday)
    const dayOfWeekMap = 
        Mon: 1,
        Tue: 2,
        Wed: 3,
        Thur: 4,
        Fri: 5,
        Sat: 6,
        Sun: 7,
    ;

    // -7 means last week
    // dayOfWeekMap[dayOfWeek] get the ISODay for the desired dayOfWeek

    // e.g. If today is Sunday, getISODay(fromDate) will returns 7
    // if the day we want to find is Thursday(4), apart from subtracting one week(-7),
    // we also need to account for the days between Sunday(7) and Thursday(4)
    // Hence we need to also subtract (getISODay(fromDate) - dayOfWeekMap[dayOfWeek])
    const offsetDays = -7 - (getISODay(fromDate) - dayOfWeekMap[dayOfWeek]);

    return addDays(fromDate, offsetDays);


console.log(getClosestDayOfLastWeek('Mon'));

【讨论】:

以上是关于如何使用 date-fns 找到一周中最近的一天的主要内容,如果未能解决你的问题,请参考以下文章

获取一周中特定日期的下一个日期

使用1个存储过程中的表,该表仅在一周中的一天运行,作为对每天运行的另一个存储过程的引用

如何获取一周中每一天的密码?

如何在一周中的每一天的每一天中创建空条目

MySQL - 计算一周中每一天但每个发件人的所有行

如何在 DatePicker 中使一周中的某些天不可用