一、基本概念
1.1 UTC(Coordinated Universal Time,协调世界时)
- 全球统一的时间标准,不受时区影响。
- 以原子时钟为基础,偶尔会加“闰秒”来校正地球自转误差。
- 用于存储、通信和时间比较的基准时间。
1.2 GMT(Greenwich Mean Time,格林威治标准时间)
- 历史上的标准时间,与 UTC 基本等同。
- 实际应用中 GMT ≈ UTC。
1.3 时区(Time Zone)
- 地球划分为 24 个时区,每个时区相差 1 小时。
- 中国标准时间(CST/北京时间):UTC+8。
- 其他常见:纽约(美国东部时间,UTC-5/UTC-4)、伦敦(UTC+0/UTC+1,含夏令时)。
1.4 夏令时(Daylight Saving Time, DST)
- 某些国家/地区在夏季人为将时间拨快一小时,目的是节约能源。
- 中国大陆目前不实行夏令时。
二、时间戳(Timestamp)
2.1 定义
- 指自 1970 年 1 月 1 日 00:00:00 UTC 起经过的时间。
- 常用单位有秒(10位)和毫秒(13位)。
2.2 获取时间戳(JavaScript)
const msTimestamp = Date.now();
const msTimestamp2 = new Date().getTime();
const sTimestamp = Math.floor(Date.now() / 1000);
三、时间格式化与转换
3.1 常见格式
- ISO 8601(国际标准):2024-06-28T08:00:00Z
- 本地字符串:2024-06-28 16:00:00
- 时间戳:1719552000000
3.2 JavaScript 示例
const now = new Date();
console.log(now.toISOString());
console.log(now.toString());
console.log(now.toLocaleString());
四、时区转换
4.1 本地时间与UTC互转
- 本地时间 = UTC 时间 + 时区偏移(如中国为 +8 小时)
- JavaScript 中,
Date对象存储的是本地时间,toISOString()输出的是 UTC
const now = new Date();
console.log(now.getUTCFullYear(), now.getUTCMonth() + 1, now.getUTCDate(), now.getUTCHours());
4.2 常见库
- moment.js(已停止维护)
- dayjs
- date-fns
- luxon
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);const beijing = dayjs().tz('Asia/Shanghai').format();
const utcTime = dayjs().utc().format();
五、前端开发中时间的常见场景
- 存储与通信:统一用 UTC 时间戳保存,前端/后端都能准确还原。
- 显示:根据用户本地时区格式化显示。
- 日志与监控:建议统一用 UTC,便于跨时区对比分析。
- 定时/倒计时:用时间戳做时间差计算,避免时区和夏令时影响。
六、常见问题与误区
- 千万不要直接用本地时间做跨系统时间对比。
- 日期字符串解析要注意时区,如
2024-06-28T08:00:00Z表示UTC,2024-06-28 08:00:00默认按本地时区解析。 - JavaScript 的 Date 对象与本地时区相关,但也可用 UTC 方法(如 getUTCFullYear 等)。
七、常用时间格式与代码总结
| 需求 | 代码示例 | 说明 |
|---|
| 当前毫秒时间戳 | Date.now() | 1970以来的毫秒数 |
| 当前秒时间戳 | Math.floor(Date.now() / 1000) | 1970以来的秒数 |
| ISO时间字符串 | new Date().toISOString() | UTC标准格式 |
| 本地时间字符串 | new Date().toLocaleString() | 当前时区格式 |
| UTC转本地 | new Date(Date.UTC(2024, 5, 28, 8, 0, 0)) | 注意月份0-11,需+1 |
| 本地转UTC | date.toISOString() | |
八、参考资料
- MDN JavaScript Date
- 世界标准时间(UTC)
- 时区列表