| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /**
- * 日期时间工具
- */
- /**
- * 格式化时间戳/日期为指定格式
- * y=年 M=月 d=日 h=时 m=分 s=秒(月日时分秒不足两位补零)
- */
- export function format(format: string, time?: number) {
- const now = time ? new Date(time) : new Date();
- const map: Record<string, string | number> = {
- y: now.getFullYear(),
- M: now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`,
- d: now.getDate() > 9 ? now.getDate() : `0${now.getDate()}`,
- h: now.getHours() > 9 ? now.getHours() : `0${now.getHours()}`,
- m: now.getMinutes() > 9 ? now.getMinutes() : `0${now.getMinutes()}`,
- s: now.getSeconds() > 9 ? now.getSeconds() : `0${now.getSeconds()}`,
- };
- const res = [];
- for (let i = 0; i < format.length; i++) {
- if (map[format.charAt(i)]) {
- res.push(map[format.charAt(i)]);
- } else {
- res.push(format.charAt(i));
- }
- }
- return res.join("");
- }
- /**
- * iOS 安全的日期解析:兼容 "2026-01-01 10:00:00" 格式(iOS 不支持 "-" 分隔)
- */
- export function parseDate(str: string | number | Date): Date {
- if (str instanceof Date) {
- return str;
- }
- if (typeof str === "number") {
- return new Date(str);
- }
- return new Date(String(str || "").replace(/-/g, "/"));
- }
- /**
- * 充电时长格式化:"x小时y分钟" 或 "y分钟"
- * @param minMinutes 最小时长(分钟),用于修正起止时间异常时显示 0 分钟
- */
- export function formatDuration(start: string | number | Date, end: string | number | Date, minMinutes = 0): string {
- const startTime = parseDate(start).getTime();
- const endTime = parseDate(end).getTime();
- let diff = parseInt(`${(endTime - startTime) / 1000}`);
- if (Number.isNaN(diff) || diff < 0) {
- diff = 0;
- }
- const min = parseInt(`${diff / 60}`);
- return formatDurationMinutes(Math.max(min, minMinutes));
- }
- function formatDurationMinutes(min: number): string {
- return min >= 60
- ? `${parseInt(`${min / 60}`)}小时${parseInt(`${min - parseInt(`${min / 60}`) * 60}`)}分钟`
- : `${min}分钟`;
- }
|