在 JavaScript 中,时间戳(Timestamp)通常指 Unix 时间戳,即从 1970年1月1日 00:00:00 UTC 到某个时间点经过的 毫秒数(注意:其他语言如 Python 可能使用秒,但 JavaScript 默认用毫秒)。以下是时间戳与时间格式相互转换的常用方法:
1. 获取当前时间戳
// 方法1:Date.now()
const timestamp1 = Date.now();
// 方法2:new Date().getTime()
const timestamp2 = new Date().getTime();
// 方法3:+new Date()
const timestamp3 = +new Date();
2. 时间戳 → 时间对象
用时间戳生成 Date
对象后,可提取具体时间信息:
const timestamp = 1696147200000; // 示例时间戳(2023-10-01 00:00:00 UTC)
const date = new Date(timestamp);
// 提取时间信息(本地时区)
const year = date.getFullYear(); // 2023
const month = date.getMonth() + 1; // 10(注意月份从0开始,需+1)
const day = date.getDate(); // 1
const hours = date.getHours(); // 8(假设时区为UTC+8)
const minutes = date.getMinutes(); // 0
const seconds = date.getSeconds(); // 0
// 提取UTC时间信息
const utcHours = date.getUTCHours(); // 0(UTC时间)
3. 时间戳 → 格式化字符串
将 Date
对象格式化为易读的字符串:
// 方法1:使用内置方法(本地时区)
const localDateStr = date.toLocaleDateString(); // "2023/10/1"
const localTimeStr = date.toLocaleTimeString(); // "08:00:00"
const localStr = date.toLocaleString(); // "2023/10/1 08:00:00"
// 方法2:手动拼接(灵活定制)
const formattedTime = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours}:${minutes}:${seconds}`;
// "2023-10-01 08:00:00"
// 方法3:转成ISO标准格式(UTC时间)
const isoString = date.toISOString(); // "2023-10-01T00:00:00.000Z"
4. 时间字符串 → 时间戳
将日期字符串解析为时间戳:
// 方法1:Date.parse()(需符合标准格式)
const timestamp4 = Date.parse('2023-10-01T00:00:00Z'); // 1696147200000(UTC时间)
// 方法2:new Date().getTime()
const dateStr = '2023-10-01 08:00:00'; // 假设本地时区为UTC+8
const timestamp5 = new Date(dateStr).getTime(); // 1696147200000(需注意时区问题)
// 注意:非标准格式可能导致解析失败,建议使用ISO格式(YYYY-MM-DDTHH:mm:ssZ)
5. 常见场景示例
场景1:计算时间差
const start = Date.now();
// ...执行某些操作
const end = Date.now();
const duration = end - start; // 毫秒数
场景2:倒计时功能
function formatCountdown(timestamp) {
const now = Date.now();
const diff = timestamp - now;
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
return `${days}天 ${hours}小时`;
}
场景3:UTC与本地时间互转
// UTC时间 → 本地时间
const utcDate = new Date('2023-10-01T00:00:00Z');
const localHours = utcDate.getHours(); // 本地时区的小时数(如UTC+8得到8)
// 本地时间 → UTC时间戳
const localDate = new Date(2023, 9, 1, 8, 0, 0); // 2023-10-01 08:00:00(本地时间)
const utcTimestamp = Date.UTC(2023, 9, 1, 0, 0, 0); // 1696147200000
注意事项
时区问题
new Date()
和Date.parse()
默认使用本地时区,而toISOString()
和Date.UTC()
使用 UTC 时区。跨时区应用建议统一使用 UTC 时间。
时间戳单位
JavaScript 使用 毫秒,与其他语言(如 Python 的秒)转换时需注意单位换算:
const seconds = Math.floor(timestamp / 1000); // 毫秒转秒 const milliseconds = seconds * 1000; // 秒转毫秒
浏览器兼容性
避免使用非标准日期格式(如
'2023-10-01'
不带时间部分),不同浏览器解析结果可能不一致。