【问题标题】:Change moment date string into proper timezone将时刻日期字符串更改为适当的时区
【发布时间】:2018-12-11 16:02:25
【问题描述】:

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

我需要这种格式的特定方式,这就是我使用时刻的原因。

假设我要输入的日期字符串是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-timezone 并使用moment.tz 解析您的输入,很确定之前有人问过。
  • 我对此进行了调查,但我发现这样做的唯一方法是,我无法按照我的要求对其进行格式化。基本上我想我需要这两者一起工作:将其格式化为YYYY-MM-DD hh:mm:ss:ms 格式并使其处于正确的时区。

标签: javascript date momentjs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 2014-07-03
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多