【问题标题】:Convert java date into angular date将java日期转换为角度日期
【发布时间】:2018-09-29 12:45:27
【问题描述】:

我正在研究使用 angular4(前端)和 java(后端)的项目。 我从 java 后端服务器获取以下格式的日期到角度服务器。

2018-05-23T18:30:00.000+0000

我需要将其转换为 javascript/angular Date 对象。 我试过下面的代码

Date d = new Date(java_date);

但这会产生 Invalid Date 错误。

知道如何处理上述日期格式。

【问题讨论】:

  • 那个字符串肯定是一个有效的日期,所以变量java_date必须有一些其他的字符串(或其他)。
  • 确保将日期传递为"2018-05-23T18:30:00.000+0000",即字符串
  • 也应该是let d = new Date(str) 而不是Date d
  • 应该更改 Java 后端以返回 Instant.now().toString() 的结果,以在末尾获得标准的 Z 而不是 +0000

标签: javascript angular date


【解决方案1】:

字符串“2018-05-23T18:30:00.000+0000”与ECMA-262中的格式不一致,在小时和分钟之间的时区偏移中缺少冒号,因此实现可能会将其视为无效(例如 Safari)。

您有多种选择:

  1. 用“Z”替换时区偏移并使用内置解析器:new Date('2018-05-23T18:30:00.000Z')
  2. 在偏移量中插入冒号并使用内置解析器:new Date('2018-05-23T18:30:00.000+00:00')
  3. 为这种特定格式编写您自己的解析器(可能需要 4 行代码)
  4. 使用库(有很多好的库,它们也可以帮助格式化)

我建议使用 3 或 4,因为内置解析器是出了名的善变,但上述任何一种都可能做到。

【讨论】:

    【解决方案2】:

    你写的日期 - 由它的 ISO 字符串给出,你应该使用 JS/Angular 解析它

    var a = Date.parse("2018-05-23T18:30:00.000+0000");
    

    这是 MDN 的相关链接:

    MDN Parse

    MDN ISO

    【讨论】:

    • 如果我删除了最后一个 +0000,我会遇到问题,然后一切正常,但我不想使用字符串操作来解析它。
    • 日期构造函数(当传递一个字符串时)调用 Date.parse。你的回答解决不了任何问题。
    • @PrasadParab 你用的是什么浏览器?似乎在 Chrome 中工作正常
    • @user184994 正确它可以在 Chrome 中使用,但我在 Safari12.0 上尝试过它无法正常工作?
    • 在这种情况下,听起来你别无选择,只能操纵字符串值(可能类似于java_date.substring(0, 23)
    猜你喜欢
    • 2021-09-02
    • 2015-07-09
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多