【问题标题】:Concatenating date and time in React Native returns 'Invalid Date'在 React Native 中连接日期和时间返回“无效日期”
【发布时间】:2017-12-26 21:28:19
【问题描述】:

我的 React-Native 应用程序中有两个字段,一个用于日期,一个用于时间。日期字段返回格式为“YYYY-MM-DD”的值,时间字段返回格式为“hh:mm A”的值。我正在使用 moment 进行格式转换。最终的 API 调用应使用格式为“YYYY-MM-DDTHH:mm”的单个条目进行,因此要连接我使用的日期和时间,

moment(date+ " "+time).format("YYYY-MM-DDTHH:mm:ss")

它在我的 Android 和 iOS 模拟器中运行良好,当我在设备上调试时也能正常工作,但一旦我为两者构建它就会开始返回

日期无效。

编辑:试过moment(date + " " + value).format();,在构建中也返回“无效日期”。 还尝试直接使用Date new Date(date+ " " + time); 而不提供任何格式,也会在构建中返回“无效日期”。

【问题讨论】:

  • 如果你把这个("YYYY-MM-DDTHH:mm:ss")改成这个("YYYY-MM-DD HH:mm:ss")怎么办?
  • @RizalSidik 这是我应该在我的 API 调用中使用的格式。但我尝试提醒构建中的每个值,发现即使我提供moment(date + " " + value).format();,我也会收到“无效日期”。

标签: javascript datetime react-native momentjs


【解决方案1】:

您必须使用moment(String, String),因为您的输入既不是 ISO 8601 也不是 RFC 2822 格式。

正如moment(String) 所说:

从字符串创建时刻时,我们首先检查字符串是否与已知的 ISO 8601 格式匹配,然后检查字符串是否与 RFC 2822 日期时间格式匹配,然后再回退到 new Date(string),如果已知格式是没找到。

为了获得一致的结果解析除 ISO 8601 字符串之外的任何内容,您应该使用字符串 + 格式。

在您的情况下,您可以使用:

moment(date+ " "+time, "YYYY-MM-DD hh:mm a").format("YYYY-MM-DDTHH:mm:ss")

【讨论】:

  • 谢谢伙计!它就像一个魅力。但是你知道为什么它只出现在构建中而不出现在模拟器中吗?
  • @DanPhilip 不客气!我不知道为什么它只发生在构建中,可能是因为字符串解析依赖于环境,如linked doc 中所述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多