【问题标题】:JS not parsing Date correctly on production serverJS 无法在生产服务器上正确解析日期
【发布时间】:2020-01-02 08:10:28
【问题描述】:

我使用 ajax 从数据库中获取数据,我使用这两行代码在输入 Date 中显示日期:

var dateReceptionDE = new Date(tache.dateReceptionDE); 
console.log("From DB : " + tache.dateReceptionDE);
console.log("In the variable: " + dateReceptionDE);
document.getElementById("ReceiveEDDateEdit").valueAsDate = new 
           Date(dateReceptionDE.getFullYear(),dateReceptionDE.getMonth(),dateReceptionDE.getDate(),12);

这是 localhost 中的结果:

但是当我在生产服务器中部署它时,我得到了这个:

PS 1:我正在使用 MySql(作为 DB)、JEE(作为后端)和 JS 开发一个项目。

PS 2:DB 中的日期类型是 DATETIME,我试过 DATE 但结果还是一样。

PS 3:Tomcat 版本是 8.5.43(本地和产品服务器)

更新: 我忘了提到我也在 java servlet 和 js 之间使用 json。

Object task= tacheDao.selectREQUEST();

        String json = new Gson().toJson(task);

        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.write(json);

AJAX:

var task= JSON.parse(data); 

提前致谢,

【问题讨论】:

  • 为什么不将日期作为 ISO 8601 字符串发送?这是一个有原因的标准 - 被使用。
  • 因为我有 Html 输入作为日期
  • Date 读取 ISO 8601 字符串,它实际上是极少数可以保证正确解析的格式之一
  • @VLAZ 请问如何将 JSON 生成的字符串转换成这种格式?

标签: javascript ajax date parsing


【解决方案1】:

我通过修改 JSON 对象中的 GSON 格式日期来解决这个问题:

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
String json =  gson.toJson(task);

【讨论】:

    【解决方案2】:

    这不起作用的原因是因为您的 MySQL 查询返回的日期字符串无法由 JS 立即解析。在您的 SQL 查询中,尝试格式化日期列,如下所示:

    SELECT DATE_FORMAT(dateColumnName, "%m/%d/%Y") AS dateReceptionDE FROM Table_Name;
    

    【讨论】:

    • 这是一个无效的日期格式,解析它将依赖于 JavaScript 中的实现。
    • @VLAZ 无效的日期格式是什么意思?你的意思是“%m/%d/%Y”格式在JS中是无效的日期格式吗?
    • 它不起作用......我认为问题出在 JSON 上,它将日期解析为字符串并给我这种格式“2019 年 12 月 31 日”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2022-06-17
    • 2020-08-06
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多