1. 基础时间获取方法
/**
* 获取当前时间戳
*/
当前时间戳: function() {
return Date.now();
}
这是最基础的方法,返回当前时间的毫秒级时间戳。常用于记录时间点或计算时间差。
/**
* 获取当前时间
*/
当前时间: function() {
return new Date();
}
返回当前的Date对象,可以用于后续的时间处理。
2. 时间等待和休眠方法
/**
* 休眠指定的毫秒数(同步方式)
*/
休眠: function(ms) {
try {
// 参数验证
if (typeof ms !== 'number' || ms < 0) {
console.error("[时间.休眠] 错误:参数必须是非负数");
return;
}
var start = new Date().getTime();
while (new Date().getTime() < start + ms) {
// 空循环等待
}
} catch (error) {
console.error("[时间.休眠] 错误:" + error);
}
}
这是一个同步的休眠方法,会阻塞执行指定的毫秒数。注意:这会阻塞主线程。
/**
* 等待指定时间(异步方式)
*/
等待指定时间: function(ms) {
try {
if (typeof ms !== 'number' || ms < 0) {
console.error("[时间.等待指定时间] 错误:ms必须是非负数");
return Promise.reject("ms必须是非负数");
}
return new Promise(function(resolve) {
setTimeout(resolve, ms);
});
} catch (error) {
console.error("[时间.等待指定时间] 错误:" + error);
return Promise.reject(error);
}
}
这是异步版本的等待,返回Promise,不会阻塞主线程。推荐使用这个方法而不是休眠
。
3. 时间格式化和转换
/**
* 格式化时间为指定格式
*/
格式化: function(date, format) {
try {
format = format || "YYYY-MM-DD HH:mm:ss";
// ... 参数验证 ...
var formatMap = {
YYYY: dateObj.getFullYear(),
MM: String(dateObj.getMonth() + 1).padStart(2, '0'),
DD: String(dateObj.getDate()).padStart(2, '0'),
HH: String(dateObj.getHours()).padStart(2, '0'),
mm: String(dateObj.getMinutes()).padStart(2, '0'),
ss: String(dateObj.getSeconds()).padStart(2, '0'),
SSS: String(dateObj.getMilliseconds()).padStart(3, '0')
};
return format.replace(/YYYY|MM|DD|HH|mm|ss|SSS/g, function(match) {
return formatMap[match];
});
} catch (error) {
console.error("[时间.格式化] 错误:" + error);
return null;
}
}
这个方法可以将日期格式化为指定的字符串格式。支持的格式标记:
- YYYY: 年份
- MM: 月份(01-12)
- DD: 日期(01-31)
- HH: 小时(00-23)
- mm: 分钟(00-59)
- ss: 秒(00-59)
- SSS: 毫秒(000-999)
4. 时间组件获取
获取年: function(date) {
try {
var dateObj = date ? new Date(date) : new Date();
return dateObj.getFullYear();
} catch (error) {
console.error("[时间.获取年] 错误:" + error);
return null;
}
}
类似的还有获取月
、获取时
、获取分
、获取秒
、获取毫秒
方法,它们都:
- 接受可选的日期参数,不传则使用当前时间
- 返回对应的时间组件
- 包含错误处理
5. 高级功能
/**
* 倒计时秒
*/
倒计时秒: function(seconds, callback, doneCallback) {
try {
var remainingSeconds = seconds;
// 立即执行一次回调
if (typeof callback === 'function') {
callback(remainingSeconds);
}
var intervalId = setInterval(function() {
remainingSeconds--;
if (typeof callback === 'function') {
callback(remainingSeconds);
}
if (remainingSeconds <= 0) {
clearInterval(intervalId);
if (typeof doneCallback === 'function') {
doneCallback();
}
}
}, 1000);
return intervalId;
} catch (error) {
console.error("[时间.倒计时秒] 错误:" + error);
return null;
}
}
这是一个倒计时功能:
- 每秒调用一次callback
- 传入剩余秒数
- 倒计时结束时调用doneCallback
- 返回intervalId供取消使用
/**
* 等待指定字符出现
*/
等待指定字符出现: function(checkFn, timeout, interval) {
try {
if (typeof checkFn !== 'function') {
console.error("[时间.等待指定字符出现] 错误:checkFn必须是函数");
return Promise.reject("checkFn必须是函数");
}
timeout = timeout || 5000;
interval = interval || 100;
return new Promise(function(resolve, reject) {
if (checkFn()) {
resolve();
return;
}
var startTime = Date.now();
var intervalId = setInterval(function() {
if (Date.now() - startTime > timeout) {
clearInterval(intervalId);
reject("等待超时");
return;
}
if (checkFn()) {
clearInterval(intervalId);
resolve();
}
}, interval);
});
} catch (error) {
console.error("[时间.等待指定字符出现] 错误:" + error);
return Promise.reject(error);
}
}
这是一个高级的等待功能:
- 接受一个检查函数
- 定期检查条件是否满足
- 支持超时设置
- 返回Promise
6. 错误处理特点
所有方法都采用了统一的错误处理模式:
- try-catch 包裹主要逻辑
- 详细的参数验证
- 统一的错误日志格式
- 失败时返回null或reject Promise
7. 使用示例
// 基础用法
var now = 时间.当前时间();
var formatted = 时间.格式化(now, "YYYY年MM月DD日");
// 异步等待
时间.等待指定时间(1000).then(function() {
console.log("1秒后执行");
});
// 倒计时
时间.倒计时秒(5,
function(remain) { console.log(remain + "秒"); },
function() { console.log("倒计时结束"); }
);
// 等待条件
时间.等待指定字符出现(
function() { return 屏幕文字.indexOf("成功") >= 0; },
5000
).then(function() {
console.log("找到了");
});
这个时间工具库设计得非常实用,既有基础的时间处理功能,也有高级的异步等待功能,错误处理完善,使用方便。您觉得还需要我解释哪部分更详细吗?