使用momentjs,我如何找到一个月中特定日期的工作日编号,以及给定月份中工作日的数量

时间:2014-01-30 08:36:42

标签: javascript momentjs

使用momentjs,我如何找到一个月中特定日期的工作日编号,以及某个工作日中某个月的工作日数?

鉴于任何日期,我需要提取它是指定月份的第一,第二等“星期六”。另外,我需要知道一个月内有多少'星期六'。 “星期六”只是一个例子。我将以一个日期作为我的起始参考点,无论日期是什么,我都需要在星期几上面的统计数据。

我开始创建第二个时刻()并移动第二个对象的一周并比较月份名称的路径......但是如果可能的话,我想使用momentjs原生方法来做这个。

2 个答案:

答案 0 :(得分:3)

只要你知道你正在使用的日期,以及那个月的天数,其他一切都很简单。

如果您知道这是星期六,而且您知道这是该月的X天,那么您也知道它是该月的Math.ceil(X/7)星期六。

现在,如果您知道该月有DAYS_IN_MONTH天,并且您知道星期六属于该月的X天,那么您也知道Math.floor(DAYS_IN_MONTH/7) + (DAYS_IN_MONTH%7 >= X%7 ? 1 : 0)天。

答案 1 :(得分:3)

戴夫提供的答案非常好,但需要进行一些小修改:

Math.floor(DAYS_IN_MONTH / 7) + ((DAYS_IN_MONTH % 7 >= ((X - 1) % 7) + 1) ? 1 : 0)

如果没有此修改,公式会错误地计算该月的第7天的工作日的值。例如,在2月28天和第7天是星期一,原始公式将计算有5个星期一,实际上有4个。更新的公式将正确计算有4个星期一。

原件:

Math.floor(28 / 7) + ((28 % 7 >= 7 % 7) ? 1 : 0) =
4 + ((0 >= 0) ? 1 : 0) =
4 + (true ? 1 : 0) =
4 + 1 =
5

更新:

Math.floor(28 / 7) + ((28 % 7 >= ((7 - 1) % 7) + 1) ? 1 : 0) =
4 + ((0 >= (6 % 7) + 1) ? 1 : 0) =
4 + ((0 >= 6 + 1) ? 1 : 0) =
4 + ((0 >= 7) ? 1 : 0) =
4 + (false ? 1 : 0) =
4 + 0 =
4