我将用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;
}

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


当前回答

var obj = eval('(' + "{Date: \/Date(1278903921551)\/}".replace(/\/Date\((\d+)\)\//gi, "new Date($1)") + ')');
var dateValue = obj["Date"];

其他回答

var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 

是否还有其他不使用jQuery库的选项?

您可以使用它从JSON获取日期:

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

然后,您可以使用JavaScript日期格式脚本(缩小和gzip时为1.2 KB)按您的需要显示它。

JSON中没有内置日期类型。这看起来像是某个纪元的秒/毫秒数。如果你知道时间,你可以通过添加正确的时间量来创建日期。

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

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

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

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

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

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

简单地使用Moment.js。它非常简单

var finalDate = moment("/Date(1198908717056)/").format("dddd, MMM Do YYYY, hh:mm:ss a");

//"Saturday, Dec 29th 2007, 12:11:57 pm"


var finalDate2 = moment("/Date(1198908717056)/").format("DD-MMM-YYYY");  //"29-Dec-2007"