列表联调
This commit is contained in:
133
src/utils/dateRange.ts
Normal file
133
src/utils/dateRange.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
/**
|
||||
* 日期范围计算工具函数
|
||||
* 提供从当前日期开始计算本周末、一周内和一个月内的开始和结束日期
|
||||
*/
|
||||
interface DateRange {
|
||||
start: Date;
|
||||
end: Date;
|
||||
}
|
||||
|
||||
interface FormattedDateRange {
|
||||
start: string;
|
||||
end: string;
|
||||
}
|
||||
|
||||
interface AllFormattedRanges {
|
||||
thisWeekend: FormattedDateRange;
|
||||
nextWeek: FormattedDateRange;
|
||||
nextMonth: FormattedDateRange;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前日期
|
||||
* @returns {Date} 当前日期对象
|
||||
*/
|
||||
const getCurrentDate = (): Date => {
|
||||
return new Date();
|
||||
};
|
||||
|
||||
/**
|
||||
* 计算本周末(当前周的周六和周日)
|
||||
* @param {Date} [baseDate] 基准日期,默认为当前日期
|
||||
* @returns {DateRange} 包含start和end的日期对象
|
||||
*/
|
||||
const getThisWeekend = (baseDate?: Date): DateRange => {
|
||||
const current = baseDate ? new Date(baseDate) : getCurrentDate();
|
||||
// 计算到周六的天数(getDay()返回0-6,0是周日,6是周六)
|
||||
const daysToSaturday = 6 - current.getDay();
|
||||
|
||||
// 计算周六日期
|
||||
const saturday = new Date(current);
|
||||
saturday.setDate(current.getDate() + daysToSaturday);
|
||||
|
||||
// 计算周日日期
|
||||
const sunday = new Date(saturday);
|
||||
sunday.setDate(saturday.getDate() + 1);
|
||||
|
||||
return {
|
||||
start: saturday,
|
||||
end: sunday
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 计算一周内(从基准日期开始的7天)
|
||||
* @param {Date} [baseDate] 基准日期,默认为当前日期
|
||||
* @returns {DateRange} 包含start和end的日期对象
|
||||
*/
|
||||
const getNextWeekRange = (baseDate?: Date): DateRange => {
|
||||
const start = baseDate ? new Date(baseDate) : getCurrentDate();
|
||||
const end = new Date(start);
|
||||
end.setDate(start.getDate() + 6); // 今天 + 6天 = 7天后
|
||||
|
||||
return {
|
||||
start,
|
||||
end
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 计算一个月内(从基准日期开始的30天)
|
||||
* @param {Date} [baseDate] 基准日期,默认为当前日期
|
||||
* @returns {DateRange} 包含start和end的日期对象
|
||||
*/
|
||||
const getNextMonthRange = (baseDate?: Date): DateRange => {
|
||||
const start = baseDate ? new Date(baseDate) : getCurrentDate();
|
||||
const end = new Date(start);
|
||||
end.setDate(start.getDate() + 29); // 今天 + 29天 = 30天后
|
||||
|
||||
return {
|
||||
start,
|
||||
end
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* 格式化日期为 YYYY-MM-DD 格式
|
||||
* @param {Date} date 日期对象
|
||||
* @returns {string} 格式化后的日期字符串
|
||||
* @throws {Error} 如果传入的不是有效的日期对象则抛出错误
|
||||
*/
|
||||
const formatDate = (date: Date): string => {
|
||||
if (!(date instanceof Date) || isNaN(date.getTime())) {
|
||||
throw new Error('Invalid date object: 请传入有效的Date实例');
|
||||
}
|
||||
return date.toISOString().split('T')[0];
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取所有日期范围的格式化结果
|
||||
* @param {Date} [baseDate] 基准日期,默认为当前日期
|
||||
* @returns {AllFormattedRanges} 包含所有格式化后的日期范围
|
||||
*/
|
||||
const getAllFormattedRanges = (baseDate?: Date): AllFormattedRanges => {
|
||||
const weekend = getThisWeekend(baseDate);
|
||||
const week = getNextWeekRange(baseDate);
|
||||
const month = getNextMonthRange(baseDate);
|
||||
|
||||
return {
|
||||
thisWeekend: {
|
||||
start: formatDate(weekend.start),
|
||||
end: formatDate(weekend.end)
|
||||
},
|
||||
nextWeek: {
|
||||
start: formatDate(week.start),
|
||||
end: formatDate(week.end)
|
||||
},
|
||||
nextMonth: {
|
||||
start: formatDate(month.start),
|
||||
end: formatDate(month.end)
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
export const dateRangeUtils = {
|
||||
getCurrentDate,
|
||||
getThisWeekend,
|
||||
getNextWeekRange,
|
||||
getNextMonthRange,
|
||||
formatDate,
|
||||
getAllFormattedRanges
|
||||
};
|
||||
|
||||
export default dateRangeUtils;
|
||||
@@ -20,6 +20,7 @@ export const getCurrentLocation = (): Promise<LocationInfo> => {
|
||||
Taro.getLocation({
|
||||
type: 'wgs84',
|
||||
success: (res) => {
|
||||
console.log('===获取地理位置', res)
|
||||
// 使用逆地理编码获取地址信息
|
||||
reverseGeocode(res.latitude, res.longitude)
|
||||
.then(address => {
|
||||
|
||||
Reference in New Issue
Block a user