我将用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;
}
这个解决方案从回调方法中获取了我的对象,并使用日期格式库在页面上正确显示了日期。
对于使用Newtonsoft Json.NET的用户,请阅读如何在IE8、Firefox 3.5和Json.NET中通过原生Json实现。
Json.NET编写的关于更改日期格式的文档也很有用:使用Json.NET序列化日期
对于那些太懒惰的人来说,这里是快速的步骤。由于JSON具有松散的DateTime实现,因此需要使用IsoDateTimeConverter()。注意,由于Json.NET4.5的默认日期格式是ISO,因此不需要下面的代码。
string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());
JSON将作为
"fieldName": "2009-04-12T20:44:55"
最后,一些JavaScript将ISO日期转换为JavaScript日期:
function isoDateReviver(value) {
if (typeof value === 'string') {
var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
if (a) {
var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
return new Date(utcMilliseconds);
}
}
return value;
}
我是这样用的
$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);
您还可以使用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');