从日期选择器中的特定日期计算每月的第一周?

Posted

技术标签:

【中文标题】从日期选择器中的特定日期计算每月的第一周?【英文标题】:Calculate first week of the month from a particular day in Date picker? 【发布时间】:2021-08-15 01:21:43 【问题描述】:

例如,如果 6 月 1 日是星期四,那么 6 月的第 1 周应该从 5 日开始,因为它是星期一。

我想禁用日历中的隔周,但该周应仅从第一个月的星期一开始。

我也可以使用momentJS

【问题讨论】:

【参考方案1】:

步骤

    使用.startOf('month') 获取月初,我使用.add(1, 'month') 传递到下个月 使用 .day() 检查日期是否为星期一,返回一个从 0 到 6(星期日 - 星期六)的数字,因此星期一是数字 1 如果不是星期一,则使用 .add(1, 'week') 添加日期并使用 .day() 将日期设置为星期一,但这次通过方法传递您想要设置的周数 (1)李>

const MONDAY = 1;

let nextMonthStartDate = moment().add(1, 'month').startOf('month');

if (nextMonthStartDate.day() !== MONDAY) nextMonthStartDate = moment(nextMonthStartDate).add(1, 'week').day(MONDAY);

console.log(`The first complete date of $nextMonthStartDate.format('MMMM') start at the $nextMonthStartDate.format('LLLL')`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

此代码写入当前年份的第一个完整周。

const numberOfMonth = 11;

const yearStartDate = moment().startOf('year');

const MONDAY = 1;

for (let i = 0; i <= 11; i++) 
  let monthStartDate = moment(yearStartDate).add(i, 'month').startOf('month');
  if (monthStartDate.day() !== MONDAY) monthStartDate = moment(monthStartDate).add(1, 'week').startOf('week').day(MONDAY);
  console.log(`The first complete date of $monthStartDate.format('MMMM') start at the $monthStartDate.format('LLLL')`);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

这太好了,谢谢,我怎样才能使用这个禁用隔周?我尝试了多个循环,但无法获得所需的输出。我想禁用隔周,即周一至周五。默认情况下,所有周末都将被禁用。我正在使用 daterangepicker (daterangepicker.com)。感谢您的帮助:) 我不确定我明白你的意思,你想要一个星期是的还是不想要的?我从未使用过这个库,从文档中我看到有一个名为isInvalidDate 的选项,它是一个必须返回布尔值的函数。但我不确定它是否是您需要的,您可以在您的问题或jsfiddle 中添加一个工作示例吗? 解决了我的问题,感谢您的帮助! :)

以上是关于从日期选择器中的特定日期计算每月的第一周?的主要内容,如果未能解决你的问题,请参考以下文章

仅获取从一周的第一天到一周的当前日期的数据

C#中用当前日期算周的若干问题?

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数

Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐

在引导日期选择器中启用特定日期

Angular 2 在日期选择器中禁用特定日期