Moment JS 日期错误

Moment JS Wrong Date

let time = moment();

console.log(
  time
  .year(2021)
  .week(34)
  .day('monday')
  .format('D MMM YYYY'),
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

显示 16 Aug 2021 但它应该是 23 Aug 2021 - 为什么?

如果年份是 2020 年、2019 年等,效果很好,但在 2021 年会失败

没有错。如果您查看 2021 日历,34th 周是 15 - 21 August。您将其指定为 Monday。所以它是 16 Aug 2021

注意:一周的开始是 Sunday(ISO 标准)。

这可能是因为您的语言环境。 week 方法使用您的语言环境来确定哪一周是一年中的第一周(这会打乱您的周计算,使您落后一周)。

更多信息,请阅读here

.week 切换为 .isoWeek 即可。

const moment = require("moment");

let time = moment();

console.log(
  time
    .year(2021)
    .isoWeek(34)
    .day('monday')
    .format('D MMM YYYY'),
);

来自此答案的更多信息