使用 JavaScript 将本地时间转换为 EST
Convert local time to EST using JavaScript
使用toLocaleString()
方法将本地时间转换为 EST,例如
date.toLocaleString('en-US', {timeZone: 'America/New_York'})
. 该
toLocaleString
方法根据提供的时区返回表示日期和时间的字符串。
const date = new Date(); // ✅ Get EST date time string // "1/27/2022, 2:45:30 AM" console.log( date.toLocaleString('en-US', { timeZone: 'America/New_York', }), ); // ✅ Get EST date object function changeTimeZone(date, timeZone) { if (typeof date === 'string') { return new Date( new Date(date).toLocaleString('en-US', { timeZone, }), ); } return new Date( date.toLocaleString('en-US', { timeZone, }), ); } // 👇️ Thu Jan 27 2022 02:45:30 console.log(changeTimeZone(new Date(), 'America/New_York'));
toLocaleString
方法返回一个特定于区域设置的字符串,该字符串已根据提供的时区进行调整。
我们的第一个示例展示了如何获取 EST 中的日期字符串。
changeTimeZone
函数可以传递一个日期字符串或一个对象,并返回一个对象,该对象的日期和时间与提供的时区(示例中的 EST)相对应。 Date
Date
我们传递给该toLocaleString
方法的两个参数是:
locales
– 带有 BCP 47 语言标记的字符串或此类字符串的数组。您可以使用任何可用的语言环境,例如es-MX
墨西哥或en-CA
加拿大。如果您需要有关此参数的更多信息,请查看
MDN 文档。options
我们在其中指定timeZone
属性的对象。在MDN 文档中阅读有关该options
对象的
更多信息。
您可以通过访问此维基百科页面找到国家代码和时区数据库名称的
表格。
但是,请注意,Date
JavaScript 中的对象不存储时区,它存储的时间戳表示自 1970 年 1 月 1 日午夜以来经过的毫秒数。
对象的日期和时间Date
对应时区,但是
Date
对象没有办法存储具体的时区。
toLocaleString
方法获取表示时区的字符串,并使用options
对象参数根据您的需要格式化字符串。您可以使用该方法options
对象
的不同属性toLocaleString
以不同方式为 EST 时区设置日期和时间格式。
const date = new Date(); // 👇️ "Thursday, January 27, 2022 at 2:54:00 AM" console.log( date.toLocaleString('en-US', { timeZone: 'America/New_York', dateStyle: 'full', timeStyle: 'full', }), );
我们将对象中
的dateStyle
和timeStyle
属性设置为以获得更详细的日期和时间表示。options
full
这两个属性的其他可能值是long
:medium
和short
。
const date = new Date(); // 👇️ "January 27, 2022 at 2:54 AM" console.log( date.toLocaleString('en-US', { timeZone: 'America/New_York', dateStyle: 'long', timeStyle: 'short', }), );
options
您可以通过访问
MDN 文档查看该对象实现的所有属性和值。
这是一个将月、日、小时、分钟和秒显示为 2 位数字的示例,即使它们的值小于10
。
const date = new Date(); // 👇️ "01/27/2022, 02:55:50 AM EST" console.log( date.toLocaleString('en-US', { timeZone: 'America/New_York', year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'short', }), );
通过将日期和时间组件的值设置为2
数字,我们可以一致地格式化它们,即使它们的值小于10
.
如果是这种情况,这些值将用前导零填充。
我们还将该timeZoneName
属性的值设置为short
,以在结果末尾显示时区名称的缩写。
您可以通过访问MDN 文档options
查看该对象支持的
所有其他属性。
toLocaleString
,这应该是您的首选方法,因为它利用了内置功能。