立即获取从 2022 年开始的一年中几周的所有开始和结束日期
Get all the start and the end dates of weeks of a year starting 2022 in moment
我想以 YYYY-MM-DD (mysql) 格式即时获取从 2022 年开始的一年中的所有星期的开始和结束日期。
我希望最终结果看起来像这样:
[
['2022-01-04', '2022-01-10'],
['2022-01-11', '2022-01-17'],
['2022-01-18', '2022-01-24'],
// ...
['2022-12-24', '2023-01-01'],
['2023-01-02', '2023-01-08'],
// ...
['2023-12-25', '2024-01-01'],
// ...
// Until the end of 2026
];
编辑 1:
我尝试了下面的代码,但它失败了:
const moment = require('moment');
const dateFormat = 'YYYY-MM-DD';
const dateToStart = '2022-04-11';
const dateToEnd = '2030-12-29';
function getWeeks() {
const weeks = [];
let currentDate = '2022-04-11';
while (true) {
if (currentDate === dateToStart) {
weeks.push([dateToStart, moment(dateToStart, dateFormat).add(6, 'days').format(dateFormat)]);
} else {
weeks.push([
moment(currentDate, dateFormat).add(1, 'days').format(dateFormat),
moment(currentDate, dateFormat).add(6, 'days').format(dateFormat),
]);
}
currentDate = moment(dateToStart).add(6, 'days').format(dateFormat);
if (currentDate === dateToEnd) break;
}
return weeks;
}
Momentjs 提供了一些非常有用的函数来获得所需的输出。
- 创建 2 个时刻对象,开始和结束
- 循环,结束
isAfter
开始
- 使用
.startOf('isoWeek')
和.endOf('isoWeek')
获取一周的范围
- 将其附加到数组
- 将开始时间对象设置为提前 1 周:
.add(1, 'week')
这个例子应该可以帮助您入门,请注意我已经降低了 dateToEnd
。
const dateFormat = 'YYYY-MM-DD';
const dateToStart = '2022-04-01';
const dateToEnd = '2023-12-29';
let weeks = [];
let momsrt = moment.utc(dateToStart, dateFormat);
let momend = moment.utc(dateToEnd, dateFormat);
while (momend.isAfter(momsrt)) {
weeks.push([
momsrt.startOf('isoWeek').format(dateFormat),
momsrt.endOf('isoWeek').format(dateFormat)
]);
momsrt.add(1, 'week');
}
console.log(weeks);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.32/moment-timezone-with-data.min.js"></script>
脚注:
TL:DR;不要将它用于新项目,有更好的选择。
我想以 YYYY-MM-DD (mysql) 格式即时获取从 2022 年开始的一年中的所有星期的开始和结束日期。
我希望最终结果看起来像这样:
[
['2022-01-04', '2022-01-10'],
['2022-01-11', '2022-01-17'],
['2022-01-18', '2022-01-24'],
// ...
['2022-12-24', '2023-01-01'],
['2023-01-02', '2023-01-08'],
// ...
['2023-12-25', '2024-01-01'],
// ...
// Until the end of 2026
];
编辑 1: 我尝试了下面的代码,但它失败了:
const moment = require('moment');
const dateFormat = 'YYYY-MM-DD';
const dateToStart = '2022-04-11';
const dateToEnd = '2030-12-29';
function getWeeks() {
const weeks = [];
let currentDate = '2022-04-11';
while (true) {
if (currentDate === dateToStart) {
weeks.push([dateToStart, moment(dateToStart, dateFormat).add(6, 'days').format(dateFormat)]);
} else {
weeks.push([
moment(currentDate, dateFormat).add(1, 'days').format(dateFormat),
moment(currentDate, dateFormat).add(6, 'days').format(dateFormat),
]);
}
currentDate = moment(dateToStart).add(6, 'days').format(dateFormat);
if (currentDate === dateToEnd) break;
}
return weeks;
}
Momentjs 提供了一些非常有用的函数来获得所需的输出。
- 创建 2 个时刻对象,开始和结束
- 循环,结束
isAfter
开始 - 使用
.startOf('isoWeek')
和.endOf('isoWeek')
获取一周的范围 - 将其附加到数组
- 将开始时间对象设置为提前 1 周:
.add(1, 'week')
这个例子应该可以帮助您入门,请注意我已经降低了 dateToEnd
。
const dateFormat = 'YYYY-MM-DD';
const dateToStart = '2022-04-01';
const dateToEnd = '2023-12-29';
let weeks = [];
let momsrt = moment.utc(dateToStart, dateFormat);
let momend = moment.utc(dateToEnd, dateFormat);
while (momend.isAfter(momsrt)) {
weeks.push([
momsrt.startOf('isoWeek').format(dateFormat),
momsrt.endOf('isoWeek').format(dateFormat)
]);
momsrt.add(1, 'week');
}
console.log(weeks);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.32/moment-timezone-with-data.min.js"></script>
脚注:
TL:DR;不要将它用于新项目,有更好的选择。