|
|
@@ -4,144 +4,116 @@ import dayjs from 'dayjs';
|
|
|
// Date.getTimezoneOffset() = utcTime - localTime;
|
|
|
|
|
|
/**
|
|
|
- * 获取当前的 unix 时间戳(10位 秒级)
|
|
|
- * @returns
|
|
|
+ * 获取当前时间的 Unix 时间戳(10 位,秒级)。
|
|
|
+ * @returns 当前时间的 Unix 秒级时间戳
|
|
|
*/
|
|
|
export function currentUnixTimestamp() {
|
|
|
return dayjs().unix();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前的 js 时间戳(13位 毫秒级)
|
|
|
- * @returns
|
|
|
+ * 获取当前时间的 JavaScript 时间戳(13 位,毫秒级)。
|
|
|
+ * @returns 当前时间的毫秒级时间戳
|
|
|
*/
|
|
|
export function currentJsTimestamp() {
|
|
|
return dayjs().valueOf();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前时间
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 获取当前本地时间的格式化字符串。
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 当前本地时间字符串
|
|
|
*/
|
|
|
export function currentDateTime(fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs().format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前的 UTC 时间
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 获取当前 UTC 时间的格式化字符串。
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 当前 UTC 时间字符串
|
|
|
*/
|
|
|
export function currentUtcDateTime(fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs().utc().format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 基于当前时间,计算 days 天前的时间
|
|
|
- * @param days
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 基于当前本地时间,计算若干天前的本地时间字符串。
|
|
|
+ * @param days 往前推的天数(正数表示过去)
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 对应日期的本地时间字符串
|
|
|
*/
|
|
|
export function getDateTimeString(days: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs().subtract(days, 'day').format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 基于当前时间,计算 days 天前的 UTC 时间
|
|
|
- * @param days
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 基于当前时间,计算若干天前的 UTC 时间字符串。
|
|
|
+ * @param days 往前推的天数(正数表示过去)
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 对应日期的 UTC 时间字符串
|
|
|
*/
|
|
|
export function getUtcDateTimeString(days: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs().subtract(days, 'day').utc().format(fmt);
|
|
|
-
|
|
|
- // 不使用 dayjs 的 utc 插件时,可以用如下代码:
|
|
|
- // const date = new Date();
|
|
|
- // const utcDt = date.getTime() + date.getTimezoneOffset() * 60 * 1000 - days * 24 * 3600 * 1000; //公式:utcTime = localTime + date.getTimezoneOffset()
|
|
|
- // return dayjs(utcDt).format(fmt);
|
|
|
-
|
|
|
- // 也可以使用如下代码,更容易理解
|
|
|
- // const date = new Date();
|
|
|
- // const crtUtcDate = new Date(
|
|
|
- // date.getUTCFullYear(),
|
|
|
- // date.getUTCMonth(),
|
|
|
- // date.getUTCDate(),
|
|
|
- // date.getUTCHours(),
|
|
|
- // date.getUTCMinutes(),
|
|
|
- // date.getUTCSeconds()
|
|
|
- // ).getTime();
|
|
|
- // const distUtcDt = crtUtcDate - days * 24 * 3600 * 1000;
|
|
|
- // return dayjs(distUtcDt).format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 格式化 unix 时间戳
|
|
|
- * @param unixTimestamp
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将 Unix 时间戳(秒级)格式化为本地时间字符串。
|
|
|
+ * @param unixTimestamp Unix 秒级时间戳
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 本地时间字符串
|
|
|
*/
|
|
|
export function unixTimeFormat(unixTimestamp: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
- return dayjs.unix(unixTimestamp).format(fmt); // 格式化时间戳
|
|
|
+ return dayjs.unix(unixTimestamp).format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 格式化 unix 时间戳为 UTC 时间
|
|
|
- * @param unixTimestamp
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将 Unix 时间戳(秒级)格式化为 UTC 时间字符串。
|
|
|
+ * @param unixTimestamp Unix 秒级时间戳
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns UTC 时间字符串
|
|
|
*/
|
|
|
export function unixTimeFormatToUtc(unixTimestamp: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs.unix(unixTimestamp).utc().format(fmt);
|
|
|
- // const oDt = new Date(unixTime * 1000);
|
|
|
- // const dt = new Date(
|
|
|
- // oDt.getUTCFullYear(),
|
|
|
- // oDt.getUTCMonth(),
|
|
|
- // oDt.getUTCDate(),
|
|
|
- // oDt.getUTCHours(),
|
|
|
- // oDt.getUTCMinutes(),
|
|
|
- // oDt.getUTCSeconds()
|
|
|
- // ).getTime();
|
|
|
- // return dayjs(dt).format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 格式化 JavaScript 时间戳
|
|
|
- * @param jsTimestamp
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将 JavaScript 时间戳(毫秒级)格式化为本地时间字符串。
|
|
|
+ * @param jsTimestamp 毫秒级时间戳
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 本地时间字符串
|
|
|
*/
|
|
|
export function jsTimeFormat(jsTimestamp: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
- return dayjs(jsTimestamp).format(fmt); // 格式化时间戳
|
|
|
+ return dayjs(jsTimestamp).format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 格式化 JavaScript 时间戳为 UTC 时间
|
|
|
- * @param jsTimestamp
|
|
|
- * @param fmt 返回的时间格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将 JavaScript 时间戳(毫秒级)格式化为 UTC 时间字符串。
|
|
|
+ * @param jsTimestamp 毫秒级时间戳
|
|
|
+ * @param fmt dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns UTC 时间字符串
|
|
|
*/
|
|
|
export function jsTimeFormatToUtc(jsTimestamp: number, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
- return dayjs(jsTimestamp).utc().format(fmt); // 格式化时间戳
|
|
|
+ return dayjs(jsTimestamp).utc().format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将一个 inFmt 格式的时间字符串格式化为 fmt 格式的时间字符串
|
|
|
- * @param dateTime
|
|
|
- * @param inFmt
|
|
|
- * @param fmt
|
|
|
- * @returns
|
|
|
+ * 按输入格式解析时间字符串,再格式化为目标格式的本地时间字符串。
|
|
|
+ * @param dateTime 时间字符串
|
|
|
+ * @param inFmt 输入字符串的 dayjs 格式模板
|
|
|
+ * @param fmt 输出字符串的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 格式化后的本地时间字符串
|
|
|
*/
|
|
|
export function stringTimeFormat(dateTime: string, inFmt: string, fmt = 'YYYY-MM-DD HH:mm:ss') {
|
|
|
return dayjs(dateTime, inFmt).format(fmt);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 将一个 inFmt 格式的时间字符串格式化为 fmt 格式的utc的时间字符串
|
|
|
- * @param dateTime
|
|
|
- * @param inFmt
|
|
|
- * @param fmt
|
|
|
- * @returns
|
|
|
+ * 按输入格式解析时间字符串,再格式化为目标格式的 UTC 时间字符串。
|
|
|
+ * @param dateTime 时间字符串
|
|
|
+ * @param inFmt 输入字符串的 dayjs 格式模板
|
|
|
+ * @param fmt 输出字符串的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 格式化后的 UTC 时间字符串
|
|
|
*/
|
|
|
export function stringTimeFormatToUtc(
|
|
|
dateTime: string,
|
|
|
@@ -152,10 +124,10 @@ export function stringTimeFormatToUtc(
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 严格根据格式模板,格式化秒数,仅支持天、时、分、秒,低于2位时,高位补0
|
|
|
- * @param seconds
|
|
|
- * @param fmt 返回的时间格式,默认为 DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将总秒数按格式模板格式化为「天 时:分:秒」字符串;仅支持 D/d、H/h、m、s 占位符,数值不足两位时高位补 0。
|
|
|
+ * @param seconds 总秒数
|
|
|
+ * @param fmt 占位符模板,默认 'DD HH:mm:ss'(D/d 天,H/h 时,m 分,s 秒)
|
|
|
+ * @returns 格式化后的时长字符串
|
|
|
*/
|
|
|
export function secondsFormat(seconds: number, fmt = 'DD HH:mm:ss') {
|
|
|
let result = fmt;
|
|
|
@@ -184,10 +156,10 @@ export function secondsFormat(seconds: number, fmt = 'DD HH:mm:ss') {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 严格根据格式模板,格式化秒数,仅支持天、时、分、秒,不显示为0的级别,例如 seconds 为 61 时,返回 1分钟1秒
|
|
|
- * @param seconds
|
|
|
- * @param fmt 返回的时间格式,默认为 DD天HH小时mm分钟ss秒
|
|
|
- * @returns
|
|
|
+ * 将总秒数按格式模板格式化为时长字符串,值为 0 的档位会省略(秒档位始终保留);seconds ≤ 0 时返回空字符串。
|
|
|
+ * @param seconds 总秒数
|
|
|
+ * @param fmt 占位符模板,默认 'DD天HH小时mm分钟ss秒'(DD/HH/mm/ss 对应天/时/分/秒及后缀)
|
|
|
+ * @returns 精简后的时长字符串,如 61 秒对应「1分钟1秒」
|
|
|
*/
|
|
|
export function secondsFormatFit(seconds: number, fmt = 'DD天HH小时mm分钟ss秒') {
|
|
|
if (seconds <= 0) {
|
|
|
@@ -223,10 +195,10 @@ export function secondsFormatFit(seconds: number, fmt = 'DD天HH小时mm分钟ss
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 输入一个时间字符串,返回其对应的 js 时间戳(13位 毫秒级)
|
|
|
- * @param dateTimeString 时间字符串,若不指定 fmt,可以支持的格式类似 '2013-11-11T15:30:00Z'、'2013-11-11T15:30:00+08:00'、'Thu Nov 14 2024 14:57:29 GMT+0800 (中国标准时间)'
|
|
|
- * @param fmt 时间字符串的格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将时间字符串解析为 JavaScript 时间戳(13 位,毫秒级)。若为 ISO 或 GMT 格式则自动识别,否则按 fmt 解析。
|
|
|
+ * @param dateTimeString 时间字符串,如 '2013-11-11T15:30:00Z'、'2013-11-11T15:30:00+08:00'、'Thu Nov 14 2024 14:57:29 GMT+0800 (中国标准时间)' 或 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @param fmt 非 ISO/GMT 时的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 毫秒级时间戳
|
|
|
*/
|
|
|
export function getTimeFromDateTimeString(
|
|
|
dateTimeString: string,
|
|
|
@@ -246,10 +218,10 @@ export function getTimeFromDateTimeString(
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 输入一个表示 UTC 时间的字符串,返回其对应的 js 时间戳(13位 毫秒级)
|
|
|
- * @param utcDateTimeString UTC 时间字符串,若不指定 fmt,可以支持的格式类似 '2013-11-11T15:30:00Z'、'2013-11-11T15:30:00+08:00'、'Thu Nov 14 2024 14:57:29 GMT+0800 (中国标准时间)'
|
|
|
- * @param fmt 时间字符串的格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将表示 UTC 的时间字符串按 UTC 解析为 JavaScript 时间戳(13 位,毫秒级)。若为 ISO 或 GMT 格式则自动识别,否则按 fmt 解析。
|
|
|
+ * @param utcDateTimeString UTC 时间字符串,格式同 getTimeFromDateTimeString 的 dateTimeString
|
|
|
+ * @param fmt 非 ISO/GMT 时的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns 毫秒级时间戳
|
|
|
*/
|
|
|
export function getTimeFromUtcDateTimeString(
|
|
|
utcDateTimeString: string,
|
|
|
@@ -266,26 +238,13 @@ export function getTimeFromUtcDateTimeString(
|
|
|
} else {
|
|
|
return dayjs.utc(utcDateTimeString, fmt).valueOf();
|
|
|
}
|
|
|
-
|
|
|
- // if (
|
|
|
- // /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/.test(utcDateTimeString) ||
|
|
|
- // /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$/.test(utcDateTimeString) ||
|
|
|
- // /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{2} \d{4} \d{2}:\d{2}:\d{2} GMT[+-]\d{4}( \(.+\))?$/.test(
|
|
|
- // utcDateTimeString
|
|
|
- // )
|
|
|
- // ) {
|
|
|
- // return new Date(utcDateTimeString).getTime();
|
|
|
- // } else {
|
|
|
- // const dt = dayjs(utcDateTimeString, fmt).toDate();
|
|
|
- // return dt.getTime() - dt.getTimezoneOffset() * 60 * 1000;
|
|
|
- // }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 输入一个时间字符串,返回其对应的 unix 时间戳(10位 秒级)
|
|
|
- * @param dateTimeString 时间字符串,若不指定 fmt,可以支持的格式类似 '2013-11-11T15:30:00Z'、'2013-11-11T15:30:00+08:00'、'Thu Nov 14 2024 14:57:29 GMT+0800 (中国标准时间)'
|
|
|
- * @param fmt 时间字符串的格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将时间字符串解析为 Unix 时间戳(10 位,秒级)。解析规则同 getTimeFromDateTimeString,结果为毫秒戳向下取整除以 1000。
|
|
|
+ * @param dateTimeString 时间字符串,格式同 getTimeFromDateTimeString
|
|
|
+ * @param fmt 非 ISO/GMT 时的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns Unix 秒级时间戳
|
|
|
*/
|
|
|
export function getUnixFromDateTimeString(
|
|
|
dateTimeString: string,
|
|
|
@@ -295,10 +254,10 @@ export function getUnixFromDateTimeString(
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 输入一个表示 UTC 时间的字符串,返回其对应的 unix 时间戳(10位 秒级)
|
|
|
- * @param utcDateTimeString UTC 时间字符串,若不指定 fmt,可以支持的格式类似 '2013-11-11T15:30:00Z'、'2013-11-11T15:30:00+08:00'、'Thu Nov 14 2024 14:57:29 GMT+0800 (中国标准时间)'
|
|
|
- * @param fmt 时间字符串的格式,默认为 YYYY-MM-DD HH:mm:ss
|
|
|
- * @returns
|
|
|
+ * 将表示 UTC 的时间字符串解析为 Unix 时间戳(10 位,秒级)。解析规则同 getTimeFromUtcDateTimeString,结果为毫秒戳向下取整除以 1000。
|
|
|
+ * @param utcDateTimeString UTC 时间字符串,格式同 getTimeFromUtcDateTimeString
|
|
|
+ * @param fmt 非 ISO/GMT 时的 dayjs 格式模板,默认 'YYYY-MM-DD HH:mm:ss'
|
|
|
+ * @returns Unix 秒级时间戳
|
|
|
*/
|
|
|
export function getUnixFromUtcDateTimeString(
|
|
|
utcDateTimeString: string,
|