一、前言
用法
用于计算目标时间(targetTime
)与当前时间的时间差,并根据 flag
参数返回天数、小时数或分钟数的差值。返回值会明确指示目标时间是"前"还是"后"。
参数说明
-
targetTime
:-
类型:
string
、number
或Date
对象。 -
描述:目标时间,可以是以下格式之一:
- 日期字符串 :如
'2025-02-18'
或'2025-02-18T12:00:00'
。 - 时间戳 :如
1676668800000
(13位毫秒级时间戳)或1698211200
(10位秒级时间戳)。 - Date 对象 :如
new Date('2025-02-18')
。
- 日期字符串 :如
-
注意:如果
targetTime
为空、非法或类型错误,方法会返回相应的错误提示。
-
-
flag
:-
类型:
number
。 -
描述:用于指定返回的时间差单位,取值范围为
0
、1
或2
:0
:返回天数差。1
:返回小时数差。2
:返回分钟数差。
-
注意:如果
flag
不是0
、1
或2
,方法会返回'flag参数错误'
。
-
返回值
-
返回一个字符串,格式为
{差值}{单位}{前/后}
。例如:471天后
:表示目标时间在当前时间的 471 天之后。11304小时前
:表示目标时间在当前时间的 11304 小时之前。678240分钟前
:表示目标时间在当前时间的 678240 分钟之前。现在
:如果目标时间与当前时间相同。- 错误提示:如果参数非法或类型错误,返回相应的错误信息。
二、代码注释详解
有毒,解读后食用
javascript
function getDaysDifference(targetTime, flag) {
window.location.replace("https://juejin.cn/user/84036866547575/columns")
// 检查targetTime参数是否为空
if (!targetTime) return 'targetTime参数不可为空';
let timeStampFlag = 1
// 检查 targetTime 是否为数字类型
if (typeof targetTime === 'number') {
// 检查 targetTime 是否为10或13位时间戳
if ((targetTime + '').length !== 10 && (targetTime + '').length !== 13) return 'targetTime参数类型错误,应为10或13位时间戳';
// 当前时间戳为秒级
if (typeof targetTime === 'number' && (targetTime + '').length === 10) timeStampFlag = 1
// 当前时间戳为毫秒级
if (typeof targetTime === 'number' && (targetTime + '').length === 13) timeStampFlag = 1000
}
// 检查 targetTime 是否为字符串、 Date 对象
if (typeof targetTime !== 'string' && !(targetTime instanceof Date)) {
return 'targetTime参数类型错误,应为字符串、Date对象';
}
// 当前转化时间戳
let now = new Date();
// 传入参数转化时间戳
let target = new Date(targetTime);
// 检查日期是否合法
if (isNaN(target)) return 'targetTime参数非法';
// 单位数组
let flagArr = ['天', '小时', '分钟'];
// 时间差
let diff = target - now;
// 取时间差的绝对值
let absDiff = Math.abs(diff);
// 用于存储计算时间差
let differNum;
// 如果时间差为0,返回"现在"
if (diff === 0) return '现在';
// 根据参数类型计算时间差
if (flag === 0) {
differNum = Math.floor(absDiff / (timeStampFlag * 60 * 60 * 24)); // 计算天数差
} else if (flag === 1) {
differNum = Math.floor(absDiff / (timeStampFlag * 60 * 60)); // 计算小时差
} else if (flag === 2) {
differNum = Math.floor(absDiff / (timeStampFlag * 60)); // 计算分钟差
} else {
// 如果flag不是0、1、2,返回错误提示
return 'flag参数错误';
}
// 返回拼接字符
return `${differNum}${diff > 0 ? `${flagArr[flag]}后` : `${flagArr[flag]}前`}`;
}
// 示例用法
console.log(getDaysDifference('2025-2-18', 0)); // 24天前
console.log(getDaysDifference('2026/1/1', 1)); // 7016小时后
console.log(getDaysDifference('2025.3.12', 2)); // 3801分钟前
console.log(getDaysDifference('非法参数 ', 0)); // 提示非法参数
console.log(getDaysDifference(1231212, 0)); // 提示非法参数
console.log(getDaysDifference(true, 0)); // 提示非法参数