refactor(server): 日期/月份格式化统一改用 dayjs

- 替换散落的 toISOString().slice(0,10) / split('T')[0] / replace('T',' ')(UTC 语义用 dayjs(...).utc() 保持完全一致)
- Asia/Shanghai 固定时区日期(Intl.DateTimeFormat en-CA)改用 dayjs().utcOffset(8)
- 月份边界 first/last、daysInMonth、nextMonth、shiftDate/addDays 等改 dayjs 简洁实现
- 涉及 attendance/classes/classrooms/room/dashboard/bills/expenses/occupancies/sync/ai-chat/rental 等 28 个文件
This commit is contained in:
2026-08-08 17:52:32 +08:00
parent 92ba2e779f
commit 8936453e84
28 changed files with 82 additions and 112 deletions

View File

@@ -5,6 +5,7 @@ import { DataSource, In, Repository } from 'typeorm';
import { RoomExpense, PersonalExpense, Room, Student } from '../entities';
import { BillsService } from '../bills/bills.service';
import { RoomsService } from '../rooms/rooms.service';
import dayjs from '../common/dayjs';
import type { CreatePersonalExpenseDto } from './dto/expense.dto';
@Injectable()
@@ -28,7 +29,7 @@ export class ExpenseOperationsService {
private isValidDate(value: string) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(value || '')) return false;
const date = new Date(`${value}T00:00:00Z`);
return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;
return !Number.isNaN(date.getTime()) && dayjs(date).utc().format('YYYY-MM-DD') === value;
}
async createPersonalExpense(dto: CreatePersonalExpenseDto, userId?: number) {