5 changed files with 252 additions and 50 deletions
@ -0,0 +1,39 @@ |
|||
// 后端时间处理函数测试脚本
|
|||
|
|||
// 复制后端的时间处理函数
|
|||
function getBeijingTime() { |
|||
const now = new Date(); |
|||
return new Date(now.getTime() + 8 * 60 * 60 * 1000); // 手动加8小时
|
|||
} |
|||
|
|||
function getBeijingTimeISOString() { |
|||
return getBeijingTime().toISOString(); |
|||
} |
|||
|
|||
function getBeijingTimeTimestamp() { |
|||
return getBeijingTime().getTime(); |
|||
} |
|||
|
|||
console.log('=== 后端时间处理函数测试 ==='); |
|||
|
|||
// 测试当前时间
|
|||
const now = Date.now(); |
|||
console.log('当前时间戳 (UTC):', now); |
|||
console.log('当前时间 (UTC):', new Date(now).toISOString()); |
|||
|
|||
// 测试getBeijingTime
|
|||
const beijingTime = getBeijingTime(); |
|||
console.log('UTC+8 Date对象:', beijingTime); |
|||
console.log('UTC+8 ISO字符串:', beijingTime.toISOString()); |
|||
|
|||
// 测试getBeijingTimeISOString
|
|||
const beijingTimeISOString = getBeijingTimeISOString(); |
|||
console.log('getBeijingTimeISOString():', beijingTimeISOString); |
|||
|
|||
// 测试getBeijingTimeTimestamp
|
|||
const beijingTimeTimestamp = getBeijingTimeTimestamp(); |
|||
console.log('UTC+8时间戳 (手动加8小时):', beijingTimeTimestamp); |
|||
console.log('时间差 (毫秒):', beijingTimeTimestamp - now); |
|||
console.log('时间差 (小时):', (beijingTimeTimestamp - now) / (1000 * 60 * 60)); |
|||
|
|||
console.log('=== 测试完成 ==='); |
|||
@ -0,0 +1,34 @@ |
|||
// 前端时间处理工具测试脚本
|
|||
const timeUtils = require('./utils/time.js'); |
|||
|
|||
console.log('=== 前端时间处理工具测试 ==='); |
|||
|
|||
// 测试当前时间
|
|||
const now = Date.now(); |
|||
console.log('当前时间戳 (UTC):', now); |
|||
console.log('当前时间 (UTC):', new Date(now).toISOString()); |
|||
|
|||
// 测试getUtc8Timestamp
|
|||
const utc8Timestamp = timeUtils.getUtc8Timestamp(); |
|||
console.log('UTC+8时间戳 (手动加8小时):', utc8Timestamp); |
|||
console.log('时间差 (毫秒):', utc8Timestamp - now); |
|||
console.log('时间差 (小时):', (utc8Timestamp - now) / (1000 * 60 * 60)); |
|||
|
|||
// 测试getUtc8Date
|
|||
const utc8Date = timeUtils.getUtc8Date(); |
|||
console.log('UTC+8 Date对象:', utc8Date); |
|||
console.log('UTC+8 ISO字符串:', utc8Date.toISOString()); |
|||
|
|||
// 测试toUtc8ISOString
|
|||
const utc8ISOString = timeUtils.toUtc8ISOString(); |
|||
console.log('toUtc8ISOString():', utc8ISOString); |
|||
|
|||
// 测试toUtc8String
|
|||
const utc8String = timeUtils.toUtc8String(); |
|||
console.log('toUtc8String():', utc8String); |
|||
|
|||
// 测试toBeijingTimeISOString (别名)
|
|||
const beijingTimeISOString = timeUtils.toBeijingTimeISOString(); |
|||
console.log('toBeijingTimeISOString():', beijingTimeISOString); |
|||
|
|||
console.log('=== 测试完成 ==='); |
|||
@ -0,0 +1,110 @@ |
|||
// 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 |
|||
}; |
|||
Loading…
Reference in new issue