这是一个棘手的话题。从我收集的信息来看,时区在创建时并未嵌入为 Date 对象的一部分。您也不能为 Date 对象设置时区。但是,您可以从 Date 对象中获得一个时区偏移量,该对象由用户的主机系统(时区)设置确定。将时区视为确定与 UTC 的偏移量的一种方式。
为了让生活更轻松,我强烈推荐moment 和moment-timezone 来处理这些事情。 Moment 为 Date 创建了一个包装器对象,并为各种事物提供了一个不错的 API。
如果通过某些参数或其他东西向您提供现有的日期对象,您可以在创建时刻对象时将其传递给构造函数,然后您就可以滚动了。此时您可以使用moment-timezone 猜测用户的时区名称,然后使用moment-timezone formatting 获取时区的缩写。我敢说大多数用户都自动设置了他们的时区,但你不应该依赖它来获得 100% 的准确性。如果需要,您还可以在提取所需格式之前手动设置要使用的时区。
通常在使用日期和时间时,最好将 UTC 存储在数据库中,然后在显示时使用 moment js 格式化用户时区的时间。在某些情况下,您可能需要确保时区正确。例如,如果您允许用户在特定日期和时间安排某事。您需要绝对确保与西海岸用户一起将时区设置为 PDT/PST,然后再转换为 UTC 以存储在数据库中。
关于时区缩写...
这是一个使用 moment 和 moment-timezone 获取时区缩写的基本示例。
// if all you need is the user's timezone abbreviation you don't even need a date object.
const usersTimezoneName = moment.tz.guess()
const timezoneAbbr = moment().tz(usersTimezoneName).format('z')
console.log(timezoneAbbr) // PST (depending on where the user is)
// to manually set the timezone
const newYorkAbbr = moment(dateObj).tz('America/New_York').format('z')
console.log(newYorkAbbr) // EST
要显示具有特定时区偏移量的特定日期对象,您可以这样做。
const xmas = new Date('December 25, 2017 16:20:00')
const losAngelesXmas = moment(xmas).tz('America/Los_Angeles')
console.log(losAngelesXmas.format("dddd, MMMM Do YYYY, h:mm:ss a")) // Monday, December 25th 2017, 4:20:00 pm