
Epoch Time,常被称为 Unix 时间或 POSIX 时间,是一种将时间表示为单一整数的系统。其数值代表从被称为“纪元”的特定参考点起所经过的秒数(或毫秒数),这个参考点通常被定义为 1970年1月1日 00:00:00 世界协调时(UTC)。

由于计算起点与 UTC 关联,Unix 时间和 POSIX 时间的计算也与 UTC 时间密不可分。在各类JavaScript应用程序中,它被广泛应用于生成时间戳、测量时间间隔和执行与时间相关的计算。本文将深入探讨如何在前端框架/工程化中使用 JavaScript 处理 Epoch 时间,实现本地时间与 UTC 时间的相互转换。
首先,简要厘清几个常用术语的核心区别与联系:
- Epoch Time:描述时间系统的通用概念,不限于特定操作系统。
- Unix Time:强调其在 Unix 及类 Unix 系统中的起源和应用。
- POSIX Time:强调其作为标准化接口的跨平台适用性。
三者本质指代同一套时间表示体系。
1. 如何从 Epoch/Unix 时间获取当地时间
在JavaScript中,Date对象是处理时间的核心工具,它以与平台无关的格式封装了一个时间点。该对象内部存储一个整数,表示自 UTC 时间 1970年1月1日午夜(纪元)以来所经过的毫秒数。因此,我们可以轻松获取当前的时间戳。
// 以毫秒为单位返回当前的 Epoch 时间
const currentEpochTime = Date.now();
console.log(currentEpochTime); // 示例输出:1739236770398
// 转换为以秒为单位的 Unix 时间戳
const currentEpochTimeInSeconds = Math.floor(Date.now() / 1000);
console.log(currentEpochTimeInSeconds);
下面的示例展示了如何从一个以秒为单位的 Unix 时间戳中提取并格式化当地日期和时间:
// 假设有一个以秒为单位的 Epoch 时间戳
const epochTimestampInSeconds = 1739236770;
// 创建 Date 对象(构造函数需要毫秒)
const localDate = new Date(epochTimestampInSeconds * 1000);
// 格式化为本地时区的日期时间字符串
const localDateTimeString = localDate.toLocaleString();
console.log("Local Date and Time:", localDateTimeString);
// 示例输出:Local Date and Time: 2/11/2025, 9:19:30 AM
如果你需要分别提取日期或时间的各个部分,可以使用以下 Date 对象的方法:
getFullYear():获取四位数的年份
getMonth():获取月份 (0-11)
getDate():获取月份中的第几天 (1-31)
getHours():获取小时 (0-23)
getMinutes():获取分钟 (0-59)
getSeconds():获取秒 (0-59)
以下函数将 Epoch 时间戳转换为 12 小时制的本地时间字符串:
function convertEpochToLocalTime(epochTimestamp) {
const date = new Date(epochTimestamp * 1000); // 转换为毫秒
const hours = date.getHours();
const minutes = date.getMinutes();
const seconds = date.getSeconds();
let formattedHours = hours % 12;
if (formattedHours === 0) {
formattedHours = 12; // 处理 12:00 AM 或 12:00 PM 的情况
}
const amOrPm = hours < 12 ? "AM" : "PM";
// 格式化,确保分钟和秒是两位数
const formattedTime = `${formattedHours}:${minutes
.toString()
.padStart(2, "0")}:${seconds.toString().padStart(2, "0")} ${amOrPm}`;
return formattedTime;
}
const epochTimestamp = 1739236770;
const formattedTime = convertEpochToLocalTime(epochTimestamp);
console.log(formattedTime); // 输出:9:19:30 AM
2. 如何从 Epoch/Unix 时间中提取 UTC 时间
同样使用 Date 对象,我们可以方便地将 Epoch 时间戳转换为标准的 UTC 时间。UTC 是协调世界时,是国际通用的时间标准,与网络/系统中的时间同步密切相关。
const epochTimestamp = 1739236770;
// 将纪元时间转换为 UTC 日期和时间对象
const utcDate = new Date(epochTimestamp * 1000);
console.log("UTC Time:", utcDate.toUTCString());
// 示例输出:UTC Time: Tue, 11 Feb 2025 01:19:30 GMT
toUTCString() 方法返回一个表示 UTC 时间的完整字符串。如果需要获取 UTC 时间的各个组成部分,可以使用对应的 UTC 方法:
getUTCFullYear():返回 UTC 年份
getUTCMonth():返回 UTC 月份 (0-11)
getUTCDate():返回 UTC 日期 (1-31)
getUTCHours():返回 UTC 小时 (0-23)
getUTCMinutes():返回 UTC 分钟 (0-59)
getUTCSeconds():返回 UTC 秒 (0-59)
以下示例演示如何提取并格式化 UTC 时间为 12 小时制:
const epochTimestamp = 1739236770;
const utcDate = new Date(epochTimestamp * 1000);
const hours = utcDate.getUTCHours();
const minutes = utcDate.getUTCMinutes();
const seconds = utcDate.getUTCSeconds();
const twelveHourFormat = hours % 12 || 12; // 将 0 点转为 12 点
const ampm = hours < 12 ? "AM" : "PM";
const formattedTime = `${twelveHourFormat}:${minutes}:${seconds} ${ampm}`;
console.log("UTC Time (12-hour format):", formattedTime);
// 输出结果:UTC Time (12-hour format): 1:19:30 AM
3. 总结
Epoch 时间(Unix/POSIX 时间)为计算机系统提供了一种标准化、数字化的时间表示方法,其核心是计算自 1970 年 1 月 1 日(UTC)以来经过的秒数或毫秒数。通过 JavaScript 的 Date 对象,开发者可以轻松地在本地时间和标准 UTC 时间之间进行转换,这对于处理国际化、日志记录、数据存储和与后端服务交互等场景至关重要。