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

时间:2018-12-11 16:02:26

标签: javascript date momentjs

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

我需要这种格式的特定方式,这就是为什么我要使用矩。

说我要输入的日期字符串是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')

不幸的是,只要我尝试对其进行格式化,它也不起作用。

1 个答案:

答案 0 :(得分:3)

使用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>