feat: 添加日历功能和进度条组件
- 在项目中引入 dayjs 库以处理日期 - 新增 PlanCard 和 ProgressBar 组件,分别用于展示训练计划和进度条 - 更新首页以显示推荐的训练计划 - 优化个人中心页面的底部留白处理 - 本地化界面文本为中文
This commit is contained in:
59
utils/date.ts
Normal file
59
utils/date.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
import dayjs, { Dayjs } from 'dayjs';
|
||||
import 'dayjs/locale/zh-cn';
|
||||
|
||||
dayjs.locale('zh-cn');
|
||||
|
||||
/**
|
||||
* 返回基于当前时间的中文问候语:早上好 / 下午好 / 晚上好
|
||||
* - 早上:05:00 - 11:59
|
||||
* - 下午:12:00 - 17:59
|
||||
* - 晚上:18:00 - 04:59
|
||||
*/
|
||||
export function getChineseGreeting(now: Date = new Date()): string {
|
||||
const hour = now.getHours();
|
||||
|
||||
if (hour >= 5 && hour < 12) {
|
||||
return '早上好';
|
||||
}
|
||||
if (hour >= 12 && hour < 18) {
|
||||
return '下午好';
|
||||
}
|
||||
return '晚上好';
|
||||
}
|
||||
|
||||
/** 获取中文月份标题,例如:2025年8月 */
|
||||
export function getMonthTitleZh(date: Dayjs = dayjs()): string {
|
||||
return date.format('YYYY年M月');
|
||||
}
|
||||
|
||||
export type MonthDay = {
|
||||
/** 中文星期:日/一/二/三/四/五/六 */
|
||||
weekdayZh: string;
|
||||
/** 月内第几日(1-31) */
|
||||
dayOfMonth: number;
|
||||
/** 对应的 dayjs 对象 */
|
||||
date: Dayjs;
|
||||
};
|
||||
|
||||
/** 获取某月的所有日期(中文星期+日号) */
|
||||
export function getMonthDaysZh(date: Dayjs = dayjs()): MonthDay[] {
|
||||
const year = date.year();
|
||||
const monthIndex = date.month();
|
||||
const daysInMonth = date.daysInMonth();
|
||||
const zhWeek = ['日', '一', '二', '三', '四', '五', '六'];
|
||||
return Array.from({ length: daysInMonth }, (_, i) => {
|
||||
const d = dayjs(new Date(year, monthIndex, i + 1));
|
||||
return {
|
||||
weekdayZh: zhWeek[d.day()],
|
||||
dayOfMonth: i + 1,
|
||||
date: d,
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取“今天”在当月的索引(0 基) */
|
||||
export function getTodayIndexInMonth(date: Dayjs = dayjs()): number {
|
||||
return date.date() - 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user