1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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
- }
|