typescript 将JavaScript Date对象生成为Locale而不是UTC

iqjalb3h  于 2023-06-30  发布在  TypeScript
关注(0)|答案(3)|浏览(141)

在我的本地节点环境中使用以下代码将日期字符串'06/06/2022'转换为日期对象时...

new Date('06/06/2022')

生成的日期对象是'2023-06- 05 T23:00:00.000Z'。日子变了。
我知道我可以使用.toLocaleDateString()将其转换回来。但我需要日期对象本身。
如何获取区域设置日期对象,而不是区域设置日期字符串?

ki1q1bka

ki1q1bka1#

也许你不应该使用date对象,因为它表示一个时区不可知的时间戳,并且唯一地定义了历史中的一个时刻。你面临的问题是节点的显示。
如果你只关注一天,你有这样的选择:

**将日期作为文本值传递:2022年6月6日

如果在不同的时区中使用该值,则这将不准确

如果您只希望节点控制台正确,可以将节点环境的时区修改为:

process.env.TZ = 'Europe/Madri';
new Date('06/06/2022');
mbskvtky

mbskvtky2#

我已经找到了一个进一步的解决方案,使用怪物俱乐部提供的答案在下面的SO链接。
creating date as UTC

umuewwlo

umuewwlo3#

正如MC皇帝提到的,本地机器日期与UTC相差1小时。
我试图在编写服务器测试和在本地运行服务器时将2个日期值等同起来。
为了在短期内解决这个问题,我至少使用了以下解决方案。

// '2023-06-05T23:00:00.000Z' this date is being generated within the test code
date1 = new Date('06/06/2022')

// '2023-06-05T00:00:00.000Z' this date is being generated by a DB ORM and returned from the unit test function
date2 = new Date(dResponse)

使两个日期相等。我已经使用.setUTCHours(0)规范化了UTC值。另一种解决方案可能是简单地在ORM响应中添加一天,以等同于测试。
然而,这两个都只是hack/workaround。我不确定是否有一个完美的解决方案。

相关问题