时区与 UTC
正确处理 UTC 和本地时间。
时区与 UTC 是 CoddyKit 上的免费 JavaScript Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 JavaScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 JavaScript Academy 课程共包含 4 节课。
本地时间与 UTC
日期存储一个绝对时刻,但可以按本地时间或全球参考时间 UTC读取。获取器也有这两种形式。
const d = new Date(Date.UTC(2024, 0, 15, 12, 0, 0))
console.log(d.getUTCHours())UTC 获取器
以 UTC 开头的方法(例如 getUTCFullYear 和 getUTCHours)会在 UTC 时区读取日期组成部分,而不受机器所在时区影响。
const d = new Date(Date.UTC(2024, 5, 15, 8, 30, 0))
console.log(d.getUTCFullYear())
console.log(d.getUTCHours())
console.log(d.getUTCMinutes())getTimezoneOffset
getTimezoneOffset 返回本地时间与 UTC 之间的差值,单位为分钟。正值表示本地时间晚于 UTC。
const d = new Date()
const offset = d.getTimezoneOffset()
console.log(typeof offset)偏移量符号
偏移量的符号与许多人的直觉相反:位于 UTC 以东的时区会得到负的偏移量。将分钟数除以 60,即可换算成小时。
const offsetMinutes = 120
const hours = offsetMinutes / 60
console.log(hours)构建 UTC 日期
Date.UTC 接受与构造函数相同的组成部分参数,但会将它们解释为 UTC,并返回一个可以传给 new Date 的时间戳。
const ts = Date.UTC(2024, 0, 1, 0, 0, 0)
const d = new Date(ts)
console.log(d.getUTCHours())UTC 设置器
setUTCHours 等设置器会在 UTC 时区调整日期,与本地设置器的工作方式相似,但以 UTC 为基准。
const d = new Date(Date.UTC(2024, 0, 1, 0, 0, 0))
d.setUTCHours(15)
console.log(d.getUTCHours())ISO 字符串中的 Z
ISO 字符串末尾的 Z 表示时间采用 UTC,也称为祖鲁时间。不带 Z 的字符串可能会被解释为本地时间。
const d = new Date("2024-01-15T10:00:00Z")
console.log(d.getUTCHours())同一时刻,不同的读取方式
本地和 UTC 获取器描述的是不同时区中的同一时刻,因此它们得到的小时数可能会因偏移量而不同。
const d = new Date(Date.UTC(2024, 0, 1, 12, 0, 0))
console.log(d.getUTCHours())以 UTC 存储
一种常见的最佳实践是将所有日期以 UTC 存储,仅在显示时转换为本地时间,这样可以避免不同地区之间的歧义。
const d = new Date(Date.UTC(2024, 0, 1, 0, 0, 0))
console.log(d.toISOString())指定时区
格式化方法接受 timeZone 选项,因此您可以明确地将某个时刻显示在指定时区中,例如 UTC。
const d = new Date(Date.UTC(2024, 0, 1, 0, 0, 0))
const text = d.toLocaleString("en-US", { timeZone: "UTC" })
console.log(typeof text)避免陷阱
在同一个日期上混用本地方法和 UTC 方法会导致隐蔽的错误。请为每次计算选择一种模式,并始终保持一致。
const d = new Date(Date.UTC(2024, 0, 1, 0, 0, 0))
console.log(d.getUTCFullYear())
console.log(d.getUTCMonth())快速检查
测试您对时区的了解。
回顾
回顾:请始终一致地使用本地时间或 UTC 读取和写入日期。
- UTC 获取器和设置器在全球时区中工作
- getTimezoneOffset 返回分钟数,符号与直觉相反
- Z 后缀表示 ISO 字符串采用 UTC
- 以 UTC 存储,以本地时间显示
const d = new Date(Date.UTC(2024, 0, 1, 12, 0, 0))
console.log(d.getUTCHours())常见问题解答
「时区与 UTC」课时是免费的吗?
是的 — 「时区与 UTC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 JavaScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 JavaScript Academy 课程共包含 4 节课。
「时区与 UTC」这节课中我会学到什么?
正确处理 UTC 和本地时间。 你通过在浏览器中直接运行的动手代码来练习 JavaScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 JavaScript Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 JavaScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「时区与 UTC」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 JavaScript Academy 课中编写并运行代码吗?
能。每节 JavaScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。