You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.1 KiB
110 lines
3.1 KiB
// 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
|
|
};
|