0Pricing
JavaScript Academy · 课时

时区与 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 创建和读取日期
  2. 时间戳与日期运算
  3. 格式化日期
  4. 时区与 UTC
← 返回 JavaScript Academy