a选择时间在30天内,按照天的维度展示,b超出30天,按照周维度展示,自然周即可,展示具体的时间区间,例:第一周(7月1~7日),第二周(7月8~14日)第三周(7月15~22日)第四周(7月23日~30日)第五周选择三天,则展示(8月1~3日),c、超出一年的,按照月维度展示即可
// 假设输入的时间戳为timestamp
const ONE_DAY = 24 * 60 * 60 * 1000; // 一天的毫秒数
const now = new Date();
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime(); // 当天零点的时间戳
if (today - timestamp <= 30 * ONE_DAY) {
// 选择时间在30天内,按照天的维度展示
const dates = [];
let date = new Date(timestamp);
while (date.getTime() <= today) {
dates.push(date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate());
date = new Date(date.getTime() + ONE_DAY);
}
console.log(dates); // 输出每天的日期,如 ['2022-01-01', '2022-01-02', ...]
} else if (today - timestamp <= 365 * ONE_DAY) {
// 超出30天且不超过一年,按照周的维度展示
const weekStartEnd = [];
let date = new Date(timestamp);
while (date.getTime() < today) {
const weekStart = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay()); // 当周的第一天
const weekEnd = new Date(date.getFullYear(), date.getMonth(), date.getDate() + (6 - date.getDay())); // 当周的最后一天
weekStartEnd.push(weekStart.getFullYear() + '年第' + getWeekNumber(weekStart) + '周(' + formatDate(weekStart) + '~' + formatDate(weekEnd) + ')');
date = new Date(weekEnd.getTime() + ONE_DAY);
}
console.log(weekStartEnd); // 输出每一周的时间段,如 ['2022年第1周(1月3日~1月9日)', '2022年第2周(1月10日~1月16日)', ...]
} else {
// 超出一年,按照月的维度展示
const monthStartEnd = [];
let date = new Date(timestamp);
while (date.getTime() < today) {
const monthStart = new Date(date.getFullYear(), date.getMonth(), 1); // 当月的第一天
const nextMonthStart = new Date(monthStart.getFullYear(), monthStart.getMonth() + 1, 1); // 下个月的第一天
monthStartEnd.push(monthStart.getFullYear() + '年' + (monthStart.getMonth() + 1) + '月(' + formatDate(monthStart) + '~' + formatDate(new Date(nextMonthStart.getTime() - ONE_DAY)) + ')');
date = new Date(nextMonthStart.getTime() - ONE_DAY);
}
console.log(monthStartEnd); // 输出每个月的时间段,如 ['2022年1月(1月1日~1月31日)', '2022年2月(2月1日~2月28日)', ...]
}
function getWeekNumber(date) {
const firstDayOfYear = new Date(date.getFullYear(), 0, 1);
const daysSinceFirstDayOfYear = Math.floor((date.getTime() - firstDayOfYear.getTime()) / ONE_DAY);
return Math.floor(daysSinceFirstDayOfYear / 7) + 1;
}
function formatDate(date) {
return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}