一年中获得周数
Get weeks in year
Moment js有一个函数可以获取一个月的天数:http://momentjs.com/docs/#/displaying/days-月/
然而,我找不到一个函数来计算一年中iso周数(52或53)。
这里有一个不依赖于库的答案。它使用一个函数来计算所需年份中12月31日所在的一周。如果一周是1(即12月31日是下一年的第一周),它会将日期编号降低,直到它得到一个不同的值,这将是所需年份的最后一周。
function getWeekNumber(d) {
// Copy date so don't modify original
d = new Date(+d);
d.setHours(0, 0, 0, 0);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
// Get first day of year
var yearStart = new Date(d.getFullYear(), 0, 1);
// Calculate full weeks to nearest Thursday
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
// Return array of year and week number
return [d.getFullYear(), weekNo];
}
function weeksInYear(year) {
var month = 11,
day = 31,
week;
// Find week that 31 Dec is in. If is first week, reduce date until
// get previous week.
do {
d = new Date(year, month, day--);
week = getWeekNumber(d)[1];
} while (week == 1);
return week;
}
[2015, 2016, 2029, new Date().getFullYear()].forEach(year =>
console.log(`${year} has ${weeksInYear(year)} weeks`)
);
getWeekNumber代码来自这里:用类似PHP的JavaScript获取一年中的一周。
编辑
或者,如果12月31日在下一年的第1周,则受试者年份有52周,否则有53周。
function getWeekNumber(d) {
d = new Date(+d);
d.setHours(0, 0, 0, 0);
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
var yearStart = new Date(d.getFullYear(), 0, 1);
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
return [d.getFullYear(), weekNo];
}
function weeksInYear(year) {
var d = new Date(year, 11, 31);
var week = getWeekNumber(d)[1];
return week == 1 ? 52 : week;
}
[2015, 2016, 2029, new Date().getFullYear()].forEach(year =>
console.log(`${year} has ${weeksInYear(year)} weeks`)
);
在一年的最后一天使用isoWeek来获取周数,例如:
function weeksInYear(year) {
return Math.max(
moment(new Date(year, 11, 31)).isoWeek()
, moment(new Date(year, 11, 31-7)).isoWeek()
);
}
2月。2014年第4周InYear&isoWeeksInYear函数已添加到moment.js
所以今天你可以使用moment().isoWeeksInYear()
或moment().weeksInYear()
有关更多信息,请参阅文档
我想发布一个从维基百科文章中派生出来的更简单的版本。https://en.wikipedia.org/wiki/ISO_week_date
文章中的声明是:
"给定年份中的周数等于相应的12月28日的周数,因为这是唯一一个总是在一年中的最后一周,因为这是1月4日之前的一周总是在下一年的第一周。
仅使用序号y,即该年中的周数可以从函数中确定返回12月31日这一周的日期";
因此,getWeekFor(new Date(2022, 11, 28)
将年份替换为您想要的任何年份将始终为您提供该年份的周数。
// modified from https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php
const getWeekFor = (date) => {
const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
const dayNum = d.getUTCDay() || 7;
const utc = new Date(d.setUTCDate(d.getUTCDate() + 4 - dayNum));
const yearStart = new Date(Date.UTC(utc.getUTCFullYear(), 0, 1)).getTime();
return Math.ceil(((d.getTime() - yearStart) / 86400000 + 1) / 7);
};
const weeks = getWeekFor(new Date(2020, 11, 28)) // 53.
console.log(weeks);
获取一年中该周的所有周和期间,可能会对其感兴趣
function getWeekPeriodsInYear(year) {
weeks = [];
// Get the first and last day of the year
currentDay = moment([year, 1]).startOf('year');
dayOfWeek = moment(currentDay).day();
lastDay = moment([year, 1]).endOf('year');
weeksInYear = moment(`${year}-01-01`).isoWeeksInYear();
daysToAdd = 7 - dayOfWeek;
for (let weekNumber = 1; weekNumber < weeksInYear + 1; weekNumber++) {
let endOfWeek = moment(currentDay).add(daysToAdd, 'days');
if (moment(endOfWeek).year() !== year) {
endOfWeek = lastDay;
}
weeks.push({ weekNumber, start: currentDay.toDate(), end: endOfWeek.toDate() });
currentDay = endOfWeek.add(1, 'day');
daysToAdd = 6;
}
return weeks;
}
getWeekPeriodsInYear(new Date().getFullYear()).forEach(period =>
document.write(`Week ${period.weekNumber} from ${moment(period.start).format('DD-MM-YYYY')} up to and including ${moment(period.end).format('DD-MM-YYYY')}<br/>`)
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
- 如何在javascript中获取一年中的周数,其中周日是一周中的第一天
- 在java脚本中选择的随机日期上添加一年
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 当用户在文本框中输入日期时,如何计算一年的持续时间
- 如何从剑道日期选择器中只获得一年
- 如何在javascript中根据周数、工作日和年份获取日期
- 如何在JS中获取周数
- 更改第二个日期时的第一个日期选择器将自动更改一年
- moment JS获得一个月中的周数
- 如何验证日期必须从两个日期中不少于一年
- 在瞬间js中计算周数不正确
- 如何使用 javascript 获取特定年份/月份的周数
- 通过选择从开始日期算起的周数或月数来自动结束日期
- javascript-一旦我选择了一年,它就不能再次选择(并且被隐藏了)
- 如何使用 JavaScript 从当前日期添加一年
- 时刻.js错误,同时在一年的最后一周添加 1 周
- 使用 JavaScript 获取给定的日期年份、周数、一周内的日数
- 使用jQuery或JavaScript对一周、一个月和一年的日期进行排序
- 一年中获得周数
- 考虑到一年从一周的中间开始,确定一周的开始和结束日期