
export function parseTime(
time: object | string | number,
cFormat: string
): string | null {
if (arguments.length === 0) {
return null;
}
const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
let date: Date;
if (typeof time === "object") {
date = time as Date;
} else {
if (typeof time === "string" && /^[0-9]+$/.test(time)) {
time = parseInt(time);
}
if (typeof time === "number" && time.toString().length === 10) {
time = time * 1000;
}
date = new Date(time);
}
interface formatObjType {
y: number;
m: number;
d: number;
h: number;
i: number;
s: number;
a: number;
}
type keyRange = "y" | "m" | "d" | "h" | "i" | "s" | "a";
const formatObj: Record<keyRange, number> = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay(),
};
const time_str = format.replace(
/{(y|m|d|h|i|s|a)+}/g,
(result, key: keyRange) => {
let value: number | string = formatObj[key];
// Note: getDay() returns 0 on Sunday
if (key === "a") {
return ["日", "一", "二", "三", "四", "五", "六"][value];
}
if (result.length > 0 && value < 10) {
value = "0" + value;
}
return value || 0;
}
);
return time_str;
}
你最后的 return 改成
函数声明的返回类型是
string
,你却返回了数字,当然不对。String.replace
方法的第二参数函数必须返回一个字符串在线地址