使用 JavaScript 将 UTC 时间转换为当地时间
Convert UTC to local time using JavaScript
使用Date()
构造函数将 UTC 转换为本地时间,例如
new Date(utcDateStr)
. 将 ISO 8601 格式的日期和时间字符串传递给
Date()
构造函数会将 UTC 日期和时间转换为本地时间。
// 👇️ 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"
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
// 👇️ "2022-01-15T12:55:21.313Z" console.log(new Date().toISOString());
在示例中,我们使用
Date.toLocaleString
方法将 UTC 转换为本地时间。
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*
方法根据访问者的本地时间获取日期的任何日期和时间部分。
// 👇️ 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
.
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 格式存储实际值。
我们之前介绍的所有方法都有一个UTC
等价物。get*
例如,
getUTCFullYear
与
getFullYear。
所有getUTC*
方法都根据通用时间返回日期或时间部分。
如果您需要完整的getUTC*
方法列表,请访问
MDN 文档。
这些getUTC*
方法根据世界时间返回日期或时间部分,而这些get*
方法根据本地时间(访问者计算机所在的时区)返回它们。
这些get*
方法根据用户访问您网站的位置返回不同的结果。