Moment.js日期返回无效

时间:2018-04-02 20:53:51

标签: reactjs date momentjs

我有一个使用Moment.js / Timezones解析某些日期的React应用程序。我从API获取数据,许多日期返回正确并被解析但有一些不是。例如,这个日期:2018-04-03T02:10:00Z正确解析了这个日期:2018-04-03T01:40:00Z。我认为没有任何理由可以解决这个问题。

我正在使用moment.timezone来猜测用户时区:

this.state = {
  userZone: moment.tz.guess()
}

然后映射我的API响应并输出日期(或正在进行的游戏状态)。

{this.props.status === 'Scheduled' ? moment(this.props.gameDate, 'YYYY-MM-DDTHH:MM00Z').tz(this.state.userZone).format('h:MM A z') : this.props.status}

我很难过为什么这只发生在几个日期,并且实际上已经在这个关闭和开启了4个月的轮子......任何想法?谢谢!

1 个答案:

答案 0 :(得分:2)

您解析输入的方式存在一些问题。由于它符合ISO 8601标准格式,因此您可以使用moment(String)代替moment(String, String)

您的代码可能如下所示:

{this.props.status === 'Scheduled' ? moment(this.props.gameDate).tz(this.state.userZone).format('h:mm A z') : this.props.status}

在您的问题中,您使用'YYYY-MM-DDTHH:MM00Z'作为moment(String, String)的格式参数,问题是格式标记区分大小写:大写MM代表月份的数字而lovercase {{1}代表分钟。 mm提供的日期无效,因为您的代码需要将2018-04-03T01:40:00Z解析为月份数。

有关如何使用here解析ISO 8601兼容输入的示例,请参阅moment(String, String),如果要在UTC模式下显式解析UTC输入,请查看moment.utc。< / p>