我将用jQuery首次尝试Ajax。我正在将数据放到页面上,但对于Date数据类型返回的JSON数据,我遇到了一些问题。基本上,我得到的字符串是这样的:

/Date(1224043200000)/

从一个对JSON完全陌生的人那里——我如何将其格式化为短日期格式?这应该在jQuery代码中的某个地方处理吗?我使用$.datepicker.formatDate()尝试了jQuery.UI.datepicker插件,但没有成功。

仅供参考:以下是我使用以下答案组合得出的解决方案:

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

这个解决方案从回调方法中获取了我的对象,并使用日期格式库在页面上正确显示了日期。


当前回答

我可以建议的最简单的方法是在JS上使用正则表达式:

//Only use [0] if you are sure that the string matches the pattern
//Otherwise, verify if 'match' returns something
"/Date(1512488018202)/".match(/\d+/)[0] 

其他回答

所有这些答案都有一个共同点:它们都将日期存储为单个值(通常是字符串)。

另一种选择是利用JSON的固有结构,将日期表示为数字列表:

{ "name":"Nick",
  "birthdate":[1968,6,9] }

当然,你必须确保对话的两端都同意格式(年、月、日),以及哪些字段是日期,。。。但是它具有完全避免日期到字符串转换问题的优点。都是数字,根本没有字符串。此外,使用顺序:年、月、日也允许按日期进行正确排序。

只需跳出框来思考——JSON日期不必存储为字符串。

这样做的另一个好处是,通过利用CouchDB处理数组值查询的方式,您可以轻松(高效)选择给定年份或月份的所有记录。

检查ISO标准的日期;有点像这样:

yyyy.MM.ddThh:mm

日期为2008.11.20T22:18。

您还可以使用JavaScript库moment.js,当您计划处理不同的本地化格式并使用日期值执行其他操作时,它会很方便:

function getMismatch(id) {
    $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
        $("#AuthMerchId").text(result.AuthorizationMerchantId);
        $("#SttlMerchId").text(result.SettlementMerchantId);
        $("#CreateDate").text(moment(result.AppendDts).format("L"));
        $("#ExpireDate").text(moment(result.ExpiresDts).format("L"));
        $("#LastUpdate").text(moment(result.LastUpdateDts).format("L"));
        $("#LastUpdatedBy").text(result.LastUpdateNt);
        $("#ProcessIn").text(result.ProcessIn);
    }
    );
    return false;
}

设置本地化就像向项目中添加配置文件(您可以在momentjs.com上获得)并配置语言一样简单:

moment.lang('de');

我使用这个简单的函数从Microsoft JSON date获取日期

function getDateValue(dateVal) {
    return new Date(parseInt(dateVal.replace(/\D+/g, '')));
};

replace(/\D+/g,“”)将删除除数字以外的所有字符

parseInt将字符串转换为数字

用法

$scope.ReturnDate = getDateValue(result.JSONDateVariable)

另外,KendoUI支持转换Microsoft JSON日期。因此,如果您的项目引用了“KendoUI”,您可以简单地使用

var newDate = kendo.parseDate(jsonDate);