日期格式化不适用于json响应

时间:2017-10-05 20:24:26

标签: javascript json momentjs

我有以下JSON响应,我正在尝试格式化日期。

{
    "webservice_status": {
        "status": "SUCCESS",
        "message": ""
    },
    "informationList": [{
        "TestNumber": "12",
        "Color": "RED",
        "dateOfPaint": "10242016",
        "location": "Wall"
    }, {
        "TestNumber": "13",
        "Color": "BLUE",
        "dateOfPaint": "10232016",
        "location": "Floor"
    }, {
        "TestNumber": "14",
        "Color": "GREEN",
        "dateOfPaint": "1052016",
        "location": "Wall"
    }, {
        "TestNumber": "15",
        "Color": "BLACK",
        "dateOfPaint": "10232016",
        "location": "Wall"
    }]
}

当我尝试按如下方式进行时刻测试时,我在下面的控制台日志中得到Invalid Date

this.processJSON = function (data_, textStatus_, jqXHR_){
    var dateMoment = data_.informationList[0].dateOfPaint;
    console.log("The date we are testing:" + dateMoment);
    console.log(moment(dateMoment).format('MM/DD/YYYY'));
}

不是在这里使用时刻,而是可以在10242016之间添加斜杠,使其看起来像10/24/2016,因为时刻似乎不起作用。但问题是,在JSON响应中返回的某些日期包含斜杠并且格式正确。所以在应用斜杠之前我也必须检查它。

2 个答案:

答案 0 :(得分:1)

如果您想将字符串"10242016"转换为date表示,并使用"10/24/2016"之类的字符串分隔,则可以使用.replace()使用正则表达式,使用以下匹配项:< / p>

var dateMoment = data_.informationList[0].dateOfPaint.replace(/^(\d{2})(\d{2})(\d{4})$/, "$1"+"/"+"$2"+"/"+"$3");

<强>演示:

&#13;
&#13;
var dateOfPaint =  "10242016";

var dateMoment  = dateOfPaint.replace(/^(\d{2})(\d{2})(\d{4})$/, "$1"+"/"+"$2"+"/"+"$3");
console.log(dateMoment);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

moment(String)方法接受符合ISO 8601和RFC 2822格式的字符串:

  

当从字符串创建片刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后检查字符串是否与RFC 2822 Date time格式匹配,然后再降至{{1}的后退如果找不到已知格式。

由于您的输入不是可识别的格式,因此您应该将format参数传递给时刻解析器(moment(String, String))。

  

如果您不知道输入字符串的确切格式,但知道它可能是众多格式之一,则可以使用格式数组。

因为您的数据也可以包含new Date(string),您可以使用moment(String, String[])传递/作为第二个参数。

您可以使用format()方法显示时刻对象的值。 ['MMDDYYYY', 'MM/DD/YYYY']会针对format()等无效输入打印Invalid Date(10月有31天,10月没有第52天)。您可以使用isValid()来了解时刻对象是否代表有效的日期/时间。

这是一个实例:

1052016
var data_ = {
    "webservice_status": {
        "status": "SUCCESS",
        "message": ""
    },
    "informationList": [{
        "TestNumber": "12",
        "Color": "RED",
        "dateOfPaint": "10242016",
        "location": "Wall"
    }, {
        "TestNumber": "13",
        "Color": "BLUE",
        "dateOfPaint": "10232016",
        "location": "Floor"
    }, {
        "TestNumber": "14",
        "Color": "GREEN",
        "dateOfPaint": "1052016",
        "location": "Wall"
    }, {
        "TestNumber": "15",
        "Color": "BLACK",
        "dateOfPaint": "10232016",
        "location": "Wall"
    }]
}

var processJSON = function (data_,textStatus_,jqXHR_){
  for(var i=0; i<data_.informationList.length; i++){
    var dateMoment =  data_.informationList[i].dateOfPaint;
    console.log("The date we are testing:"+dateMoment);
    console.log(moment(dateMoment, ['MMDDYYYY', 'MM/DD/YYYY']).format('MM/DD/YYYY'));
  }
}

processJSON(data_);