代码之家  ›  专栏  ›  技术社区  ›  PackersFan

“展平”ajax调用字符串返回的日期数组,用于datatables 1.09

  •  0
  • PackersFan  · 技术社区  · 6 年前

    我正试图在数据表中显示一行,其中包含一组日期单元格。后端的日期表示为:

    org.joda.time LocalDate closeDt;

    我正在进行一个ajax调用,以获取一组附加了多个日期的模型对象,并将所有这些数据馈送到一个(遗留版本1.09)数据表中。但问题是,closeDate作为一个值数组返回给我,它看起来像

    picture of ajax result

    不幸的是,在后端应用序列化程序,或者对模型数据进行任何类型的转换,或者如何返回模型数据,由于迁移的依赖性和问题,都不是一个选项。

    我尝试过数据表的“mrender”功能,比如:

    {"mData": "closeDt", "sTitle": "Closed Date", "mRender": function(data, type, full) {
        var date = data[1] + "/" + data[2] + "/" + data[0];
        console.log("date is: ", date);
        return date;
      }},
    

    但是,即使这样也没有成功。另外,如果我确定了一种让“mrender”工作的方法,我想提取这个函数,因为还有五个或六个其他日期以同样的方式在表中表示。

    如何将日期数组“压缩”为“mm/dd/yyyy”格式的单个字符串?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jack    6 年前

    你可以 destructure 日期数组:

    var [year, month, day] = closeDt;
    var dateStr = [month, day, year].join('/');
    

    Fiddle: http://jsfiddle.net/p0aty3rf/

        2
  •  0
  •   PackersFan    6 年前

    我最终完成了我所需要的:

    {"mData": "closeDt", "sTitle": "Closed Date", "mRender": function(data, type, full) {
        if(data !== null) {
          return new Date(data).toLocaleDateString({day: "2-digit", month: "2-digit"});
        } else {
          return "";
        }
      }},
    

    我不得不把if/else放进去,因为如果特定记录的数据为空,那么date()将被设置为1969年12月31日…我想这是当你调用new date()时的默认值,但是我没有花太多时间研究为什么或如何。我还不得不在每一个有日期的专栏的“mrender”中复制/粘贴这个,我想研究一下把它拉出来不违反dry,但现在它完成了工作。