【问题标题】:How to get monday of the week which overlaps 2 months using moment js?如何使用moment js获得重叠2个月的一周中的星期一?
【发布时间】:2021-02-16 19:00:27
【问题描述】:

我需要在星期一使用 api 创建几条记录。

获取星期一的规则是它应该是给定月份的第一个星期一或给定月份的最后一个星期一。

例如:

如果输入日期范围是 2020 年 9 月 1 日 - 2020 年 9 月 30 日,我需要拉 2020 年 9 月 28 日。

如果输入日期范围是 2020 年 10 月 1 日 - 2020 年 10 月 31 日,我需要拉 2020 年 10 月 26 日。

如果输入日期范围是 2020 年 11 月 1 日 - 2020 年 11 月 30 日,我需要拉 2020 年 11 月 30 日。

如果输入日期范围是 2020 年 11 月 1 日 - 2020 年 12 月 31 日,我需要提取 2020 年 12 月 28 日。

到目前为止,我所做的是提取给定月份的所有星期一并将它们存储在一个数组中。我尝试拉每月的第一个或最后一个星期一,但这几个月有效,而其他几个则无效。

因此,我在想如果我知道某一天(星期一)的星期,它重叠 2 个月,那么我可以拉那个星期一。

所以我的问题是如何获得重叠 2 个月的一周中的星期一?我正在使用时刻 js。

【问题讨论】:

  • 您如何知道是否需要获取任何给定月份的第一个或最后一个星期一?
  • 我不需要知道。如果我得到与随后两个月重叠的一周,那将处理正确的星期一。理想情况下,记录应该只在月初创建一次。

标签: javascript arrays date momentjs


【解决方案1】:

也许为时已晚,但对未来的观众可能会有帮助。

该函数接受start 和end,但我们只使用end,因此您可以去掉start,因为所有操作都将在end 日期进行,以便获得最后一个星期一。为了实现我们的目标,我们需要做两个简单的步骤:

  1. 使用end 日期获取月末。
  2. 获取上一个“计算”日期的星期一。

第一步,我们使用End of Time 来获取月末(最后一天)。

通过将原始时刻设置为单位时间的结尾来改变它。

然后我们可以得到日期是星期几,我们可以使用Date of Week与上一步的日期。

获取或设置星期几。 [...] 从 2.1.0 开始,还支持日期名称。这是在当前的语言环境中解析的。

以你的例子,我们可以测试我们的功能:

function lastMonday(start, end) {
  console.log('Start is ', moment(start).format('LL'));
  console.log('End is ', moment(end).format('LL'));
  return moment(end).endOf('month').day('Monday');
}

console.log('Last monday is', lastMonday('2020-09-01', '2020-09-30').format('LL'));
console.log('Last monday is', lastMonday('2020-10-01', '2020-10-31').format('LL'));
console.log('Last monday is', lastMonday('2020-11-01', '2020-11-30').format('LL'));
console.log('Last monday is', lastMonday('2020-11-01', '2020-12-31').format('LL'));
<script src="https://momentjs.com/downloads/moment.js"></script>

【讨论】:

  • 永远不会太晚:)。正是我想要的。一直以来,我一直在循环。虽然它完成了这项工作,但它不像这个那样干净。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 2022-01-05
  • 2016-04-19
相关资源
最近更新 更多