// UTC+8时间处理工具函数 // 固定时间戳(北京时间:2025-12-19 17:10:35.186) const FIXED_UTC8_TIME = 1766135435186; let isFixedTimeMode = false; // 默认关闭固定时间模式 /** * 获取UTC+8时间戳 * @param {Date|number} date - 可选,日期对象或时间戳 * @returns {number} UTC+8时间戳 */ function getUtc8Timestamp(date) { let baseTimestamp; if (isFixedTimeMode) { baseTimestamp = FIXED_UTC8_TIME; } else if (!date) { baseTimestamp = Date.now(); } else if (typeof date === 'number') { baseTimestamp = date; } else { baseTimestamp = date.getTime(); } return baseTimestamp + 8 * 60 * 60 * 1000; // 手动加8小时 } /** * 获取UTC+8 Date对象 * @param {number} timestamp - 可选,时间戳 * @returns {Date} UTC+8 Date对象 */ function getUtc8Date(timestamp) { const ts = isFixedTimeMode ? FIXED_UTC8_TIME : (timestamp || Date.now()); const date = new Date(ts + 8 * 60 * 60 * 1000); // 手动加8小时 return date; } /** * 将时间转换为UTC+8的ISO字符串(带时区信息) * @param {Date|number} date - 可选,日期对象或时间戳 * @returns {string} ISO格式的UTC+8时间字符串 */ function toUtc8ISOString(date) { const timestamp = getUtc8Timestamp(date); const utcDate = new Date(timestamp); const year = utcDate.getUTCFullYear(); const month = String(utcDate.getUTCMonth() + 1).padStart(2, '0'); const day = String(utcDate.getUTCDate()).padStart(2, '0'); const hours = String(utcDate.getUTCHours()).padStart(2, '0'); const minutes = String(utcDate.getUTCMinutes()).padStart(2, '0'); const seconds = String(utcDate.getUTCSeconds()).padStart(2, '0'); const milliseconds = String(utcDate.getUTCMilliseconds()).padStart(3, '0'); return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}+08:00`; } /** * 将时间转换为UTC+8的本地字符串 * @param {Date|number} date - 可选,日期对象或时间戳 * @param {Object} options - 可选,格式化选项 * @returns {string} 本地化的UTC+8时间字符串 */ function toUtc8String(date, options = {}) { const defaultOptions = { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false // 移除timeZone设置,因为getUtc8Timestamp已经返回UTC+8时间戳 }; const timestamp = getUtc8Timestamp(date); const utc8Date = new Date(timestamp); return utc8Date.toLocaleString('zh-CN', { ...defaultOptions, ...options }); } /** * 设置固定时间模式 * @param {boolean} mode - true启用,false禁用 */ function setFixedTimeMode(mode) { isFixedTimeMode = mode; } /** * 获取固定时间模式状态 * @returns {boolean} 当前固定时间模式状态 */ function getFixedTimeMode() { return isFixedTimeMode; } // 导出函数 module.exports = { getUtc8Timestamp, getUtc8Date, toUtc8ISOString, toUtc8String, setFixedTimeMode, getFixedTimeMode, // 向后兼容别名 getBeijingTimeTimestamp: getUtc8Timestamp, getBeijingTimeDate: getUtc8Date, toBeijingTimeISOString: toUtc8ISOString, toBeijingTimeString: toUtc8String };