export function getNumberOfWeeks(year){ const firstDayOfYear = new Date(year, 0, 1); const lastDayOfYear = new Date(year, 11, 31); const daysInYear = (lastDayOfYear - firstDayOfYear) / (24 * 60 * 60 * 1000) + 1; const weeksInYear = Math.ceil(daysInYear / 7); return weeksInYear; } export function currentWeek(){ let now = new Date(); let currentYear = now.getFullYear(); let firstDayOfYear = new Date(currentYear, 0, 1); let diffDays = Math.floor((now - firstDayOfYear) / (24 * 60 * 60 * 1000)); let currentWeek = Math.ceil((diffDays + firstDayOfYear.getDay() + 1) / 7); return currentWeek } export function getDateByWeek(week, year) { year = year || new Date().getFullYear(); let currentDate = new Date(year, 0, 1); // 当年的1月1日 let numDays = currentDate.getDay(); // 获取当年第一天是周几 if (numDays === 0) numDays = 7; // 如果是周日,则numDays设为7 let firstThursday = new Date(currentDate.getTime() + (4 - numDays) * 86400000); // 当年第一个周四 let firstWeek = Math.ceil((firstThursday.getDate() - 1) / 7); // 第一个周四前的周数 week = week + firstWeek; // 加上第一个周四的周数 if (week === 0) { year -= 1; // 如果是0周,则获取上一年的最后一周 week = getWeekNumber(new Date(year, 11, 31)); // 上一年12月31日的周数 } else if (week > 52 && getWeekNumber(new Date(year + 1, 0, 3)) === 1) { year += 1; // 如果超过52周且下一年的1月3日是周一,则获取下一年的第一周 week = 1; } currentDate = new Date(year, 0, 1); // 设置为当年的1月1日 currentDate.setDate(currentDate.getDate() + (week - 1) * 7); // 计算当周的日期 return currentDate; // 返回当前周的日期 } function getWeekNumber(date) { let currentDate = new Date(date.getTime()); let numDays = currentDate.getDay(); if (numDays === 0) numDays = 7; currentDate.setDate(currentDate.getDate() + 3 - numDays); // 周一 let firstDayYear = new Date(currentDate.getFullYear(), 0, 1); // 当年的1月1日 let firstWeek = Math.ceil((firstDayYear.getDay() - firstDayYear.getDay() % 7) / 7); // 第一个周一是当年的第几周 let weekNumber = Math.ceil((currentDate.getDay() * 5 - firstDayYear.getDay() + 10) / 7); // 当前周数 return firstWeek + weekNumber; } export function parseTime(time, cFormat) { if (arguments.length === 0 || !time) { return null } const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' let date if (typeof time === 'object') { date = time } else { if ((typeof time === 'string')) { if ((/^[0-9]+$/.test(time))) { // support "1548221490638" time = parseInt(time) } else { // support safari // https://stackoverflow.com/questions/4310953/invalid-date-in-safari time = time.replace(new RegExp(/-/gm), '/') } } if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } date = new Date(time) } const formatObj = { y: date.getFullYear(), m: date.getMonth() + 1, d: date.getDate(), h: date.getHours(), i: date.getMinutes(), s: date.getSeconds(), a: date.getDay() } const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { const value = formatObj[key] // Note: getDay() returns 0 on Sunday if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } return value.toString().padStart(2, '0') }) return time_str }