将时刻日期字符串更改为正确的时区



我有一个带时间和时区的日期。

我需要这个格式化的特定方式,这就是我使用moment的原因。

假设我要输入的日期字符串是2018-12-31 02:00:00.000 +00:00

我通过以下操作将其转换为特定格式:

const properDate = moment(date, 'YYYY-MM-DD hh:mm:ss:ms')

然而,这是假设日期是UTC,我希望它是在美国/纽约时区,所以我期望的日期和时间实际上是:

2018-12-30 21:00:00.000

所以我的问题是,当将日期/时间转换为特定格式时,如何在时区中添加时间?我知道这并不像传递参数那么简单。这是我应该调用的另一个函数吗?

我试过

const properDate = moment(date, 'YYYY-MM-DD hh:mm:ss:ms').tz('America/New_York')

但这也没用。

编辑:我还应该提到,我也在使用moment-timezone。我似乎无法将它格式化为我需要的格式,也无法将它放在正确的时区。

所以基本上,我想我可以做一些类似的事情:

const momentDate = moment(date)
const properDate = momentDate.tz(timezone).format('YYYY-MM-DD hh:mm:ss:ms')

不幸的是,只要我尝试格式化它,它也不会起作用。

使用moment.tz解析使用给定时区的时间字符串(例如'America/New_York'(,而tz()用于在区域之间转换。

这里是一个活样本:

const date = '2018-12-30 21:00:00.000';
const properDate = moment.tz(date, 'YYYY-MM-DD hh:mm:ss.SSS', 'America/New_York')
console.log(properDate.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>

最新更新