使用 JavaScript 将 UTC 时间转换为本地时间

使用 JavaScript 将 UTC 时间转换为当地时间

Convert UTC to local time using JavaScript

使用Date()构造函数将 UTC 转换为本地时间,例如
new Date(utcDateStr). 将 ISO 8601 格式的日期和时间字符串传递给
Date()构造函数会将 UTC 日期和时间转换为本地时间。

索引.js
// 👇️ Example date and time in UTC const utcDate = '2022-01-15T11:02:17Z'; const date = new Date(utcDate); // 👇️ "Sat Jan 15 2022 13:02:17 GMT+0200 (Eastern European Standard Time)" console.log(date); // ✅ Convert to Local time console.log(date.toLocaleString()); // 👉️ "1/15/2022, 1:02:17 PM"
将 ISO 8601 格式的日期和时间字符串传递给Date() 构造函数会将 UTC 日期和时间转换为本地时间。

示例中 UTC 字符串中的时间显示11:02:17 UTC由于我的时区是 UTC +0200,因此结果显示13:02:17.

请注意,UTC 日期时间字符串应以 a 结尾Z才能被视为有效的 ISO 8601。

如果字符串末尾没有 a Z,请使用加法运算符添加它,例如isoStr + 'Z'.

您还可以通过对对象调用该toISOString()
方法
来获取 ISO 8601 日期时间字符串。
Date

索引.js
// 👇️ "2022-01-15T12:55:21.313Z" console.log(new Date().toISOString());

在示例中,我们使用
Date.toLocaleString
方法将 UTC 转换为本地时间。

当没有参数传递给该方法时,它会返回一个根据用户的默认区域设置和时区格式化的字符串。
索引.js
const utcDate = '2022-01-15T11:02:17Z'; const date = new Date(utcDate); // ✅ Convert to Local time console.log(date.toLocaleString()); // 👉️ "1/15/2022, 1:02:17 PM"

如果使用东欧标准时间时区运行这些方法,上面的注释说明了格式。

您看到的输出可能会有所不同,具体取决于您的默认语言环境和默认时区。

您可以使用任何get*方法根据访问者的本地时间获取日期的任何日期和时间部分。

下面代码示例中的所有方法都根据访问者的时区返回日期或时间组件,并且在不同时区访问时会产生不同的结果。
索引.js
// 👇️ Example date and time in UTC const utcDate = '2022-01-15T11:02:17Z'; const date = new Date(utcDate); // 👇️ returns Hour of the date console.log(date.getHours()); // 👉️ 13 // 👇️ returns Minutes of the date console.log(date.getMinutes()); // 👉️ 2 // 👇️ returns Seconds of the date console.log(date.getSeconds()); // 👉️ 17 // 👇️ returns year of the date console.log(date.getFullYear()); // 👉️ 2022 // 👇️ returns month (0-11) // 0 is January, 11 is December console.log(date.getMonth()); // 👉️ 0 // 👇️ returns day of the month (1-31) console.log(date.getDate()); // 👉️ 15

所有get*方法都根据访问者的本地日期和时间返回日期或时间部分。

请注意,
getMonth
方法返回指定日期的月份作为从零开始的值(0 = 一月,1 = 二月,等等)

如果您需要完整的Date.get*方法列表,请访问
MDN 文档

您可以使用这些方法以多种不同的方式格式化本地日期。

下面是一个将本地日期和时间格式化为
YYYY-MM-DD hh:mm:ss.

索引.js
function padTo2Digits(num) { return num.toString().padStart(2, '0'); } function formatDate(date) { return ( [ date.getFullYear(), padTo2Digits(date.getMonth() + 1), padTo2Digits(date.getDate()), ].join('-') + ' ' + [ padTo2Digits(date.getHours()), padTo2Digits(date.getMinutes()), padTo2Digits(date.getSeconds()), ].join(':') ); } // 👇️ 2022-01-15 13:02:17 (yyyy-mm-dd hh:mm:ss) const utcDate = '2022-01-15T11:02:17Z'; console.log(formatDate(new Date(utcDate)));

我们使用连字符分隔符连接日期的日期部分,使用冒号分隔符连接时间部分。

您可以重新排序日期组件,将分隔符更改为正斜杠或以适合您的用例的任何方式调整此功能。 /

请注意,您很可能不应该在数据库中存储本地日期和时间。

为了保持一致性,当您必须向用户呈现日期和时间时,您应该主要使用本地时间,但您应该以 UTC 格式存储实际值。

例如,如果您在数据库中存储当地时间午夜 (00:00),您将不知道在东京(日本)、巴黎(法国)、纽约(美国)等地是否是午夜。这些都是相隔数小时的不同时刻。

我们之前介绍的所有方法都有一个UTC等价物。get*

例如,
getUTCFullYear

getFullYear

所有getUTC*方法都根据通用时间返回日期或时间部分。

如果您需要完整的getUTC*方法列表,请访问
MDN 文档

这些getUTC*方法根据世界时间返回日期或时间部分,而这些get*方法根据本地时间(访问者计算机所在的时区)返回它们。

这些get*方法根据用户访问您网站的位置返回不同的结果。

发表评论