previousDate.js 2.21 KB
export function parseDateString(dateStr) {
	const [year, month, day] = dateStr.split('-').map(Number);
	return new Date(year, month - 1, day); // 月份从0开始
}

export function formatDate(date) {
	const year = date.getFullYear();
	const month = String(date.getMonth() + 1).padStart(2, '0');
	const day = String(date.getDate()).padStart(2, '0');
	return `${year}-${month}-${day}`;
}

export function getPreviousYearMonth(startDateStr) {
	const currentDate = parseDateString(startDateStr);
	const year = currentDate.getFullYear();
	const month = currentDate.getMonth();

	let prevYear = year;
	let prevMonth = month - 1;
	if (prevMonth < 0) {
		prevYear--;
		prevMonth = 11;
	}

	const prevStartDate = new Date(prevYear, prevMonth, 1);
	const prevEndDate = new Date(prevYear, prevMonth + 1, 0); // 下个月的第0天

	return {
		startDate: formatDate(prevStartDate),
		endDate: formatDate(prevEndDate)
	};
}

export function getPreviousYear(startDateStr) {
	const currentYear = parseDateString(startDateStr).getFullYear();
	const prevYear = currentYear - 1;

	const prevStartDate = new Date(prevYear, 0, 1);
	const prevEndDate = new Date(prevYear, 11, 31);

	return {
		startDate: formatDate(prevStartDate),
		endDate: formatDate(prevEndDate)
	};
}

export function getPreviousWeek(startDateStr, endDateStr) {
	const prevStartDate = parseDateString(startDateStr);
	prevStartDate.setDate(prevStartDate.getDate() - 7);

	const prevEndDate = parseDateString(endDateStr);
	prevEndDate.setDate(prevEndDate.getDate() - 7);

	return {
		startDate: formatDate(prevStartDate),
		endDate: formatDate(prevEndDate)
	};
}
export function getPreviousDate(startDateStr,endDateStr) {
	const prevDate = parseDateString(startDateStr);
  prevDate.setDate(prevDate.getDate() - 1);

	return {
		startDate: formatDate(prevDate),
		endDate: formatDate(prevDate)
	};
}

export function calculatePreviousPeriod(params) {
	const {
		type,
		startDate,
		endDate
	} = params;

	switch (type) {
		case 'yearMonth':
			return getPreviousYearMonth(startDate);
		case 'year':
			return getPreviousYear(startDate);
		case 'week':
			return getPreviousWeek(startDate, endDate);
    case 'date':
      return getPreviousDate(startDate,endDate);
		default:
			throw new Error('Invalid type');
	}
}