【问题标题】:Create new Date object by using moment.js使用 moment.js 创建新的 Date 对象
【发布时间】:2019-06-10 06:09:24
【问题描述】:

我有字符串:

date =  "2019/1/16 00:00 +0900"

我在纽约(时区 -5),我想创建一个这样的 Date 对象:

Wed Jan 16 2019 00:00:00 GMT+0900

我无法使用 javascript 进行转换。它将返回时区 -5。 我使用 moment.js:

moment.tz(date, 'Asia/Tokyo').format('YYYY/MM/DD HH:MM');

但是,这是不对的。请你帮助我好吗。非常感谢。

【问题讨论】:

标签: javascript momentjs moment-timezone


【解决方案1】:

时区很难确定。我认为一个易于遵循且有点惯用的解决方案是这样的:

const date = "2019/1/16 00:00 +0900";

// parse in any timezone
const dateMoment = moment(date); 

// deliberately set the timezone in which the moment is interpreted in
const timezonedMoment = dateMoment.tz('Asia/Tokyo'); 

// format the moment
const formattedDate = dateMoment.format('YYYY/MM/DD HH:MM z');

当然,你可以用更简洁的形式来写。

【讨论】:

  • 很抱歉,它返回“2019/01/16 00:01 +09:00”。这是一个字符串,减号可能是错误的。我想返回一个像这样的对象:Wed Jan 16 2019 00:00:00 GMT+0900
  • 如果你想要一个 javascript Date,你应该知道它不固定在任何时区。除非您使用更高级的模型,例如moment,或者自己进行一些转换,否则您无法控制时区。格式化Date 对象将输出您计算机的时区 中的时间,在本例中为GMT-5。
  • 专注于解决方案:如果您需要在特定时区用Javascript表示日期时间,请不要使用Date,它太简单了。 moment 是标准选项,但也有其他选项。使用moment 对象而不是Date,在这种情况下,您可以使用timezonedMoment - 它知道时间点和预计工作的时区。Corey 的简单moment.tz(date, 'Asia/Tokyo') 也是如此。
  • 是的,我知道。但是当我使用新日期(日期)时。它返回当前 timez_zone(-5)。不像我预期的那样 +9。
  • @Corey 字符串中的时区仅用于解析。转储 Date 对象将在您当前时区产生等效的时间和日期。如果你使用Date,你实际上会丢失时区信息。
【解决方案2】:

如果您的日期对象是一个时刻实例,它将起作用:

moment.tz(moment(date), 'Asia/Tokyo').format('YYYY/MM/DD HH:MM Z')

【讨论】:

  • 很抱歉,它返回“2019/01/16 00:01 +09:00”。这是一个字符串,减号可能是错误的。我想返回一个像这样的对象:Wed Jan 16 2019 00:00:00 GMT+0900
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 2020-08-03
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多