如何利用Moment.js获取当前周的第一天与最后一天日期?
获取当前周的第一天到最后一天(Moment.js实现)
嘿,我刚好之前做数据筛选时遇到过一模一样的需求,用Moment.js的weekday()完全能搞定,而且用法灵活适配各种场景!
核心思路
Moment.js的weekday()方法可以直接将日期定位到当前周的指定天数,默认规则是:
0= 周日1= 周一- ...
6= 周六
利用这个特性,我们可以快速锁定当前周的首尾日期,再配合startOf('day')和endOf('day')处理时间部分,就能完美满足数据筛选的精准性要求。
代码示例
情况1:周日为一周起始日(默认配置)
// 当前周第一天(周日,00:00:00) const weekStart = moment().weekday(0).startOf('day').format('YYYY-MM-DD HH:mm:ss'); // 当前周最后一天(周六,23:59:59) const weekEnd = moment().weekday(6).endOf('day').format('YYYY-MM-DD HH:mm:ss');
如果只需要纯日期字符串(不带时间),可以简化成:
const weekStart = moment().weekday(0).format('YYYY-MM-DD'); const weekEnd = moment().weekday(6).format('YYYY-MM-DD');
情况2:周一为一周起始日
如果业务要求周一作为一周的开始,有两种实现方式:
方式一:直接调整weekday参数
// 周一作为第一天 const weekStart = moment().weekday(1).startOf('day').format('YYYY-MM-DD'); // 周日作为最后一天 const weekEnd = moment().weekday(0).endOf('day').format('YYYY-MM-DD');
方式二:全局修改周起始配置(更直观)
先通过updateLocale统一设置规则,后续使用weekday()会更顺手:
// 全局配置:周一为一周第一天 moment.updateLocale('en', { week: { dow: 1 // dow = day of week,1代表周一 } }); // 此时weekday(0)就是周一,weekday(6)就是周日 const weekStart = moment().weekday(0).startOf('day').format('YYYY-MM-DD'); const weekEnd = moment().weekday(6).endOf('day').format('YYYY-MM-DD');
为什么适合数据筛选?
通过startOf('day')和endOf('day')处理后,得到的是当前周首尾日期的完整时间范围,比如周日00:00到周六23:59,用这个范围筛选数据时,不会漏掉任何一天的记录,精准度拉满。
内容的提问来源于stack exchange,提问作者Luiz Ricardo Cardoso
相关产品推荐
相关产品推荐

