我将用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;
}
这个解决方案从回调方法中获取了我的对象,并使用日期格式库在页面上正确显示了日期。
eval()不是必需的。这将很好:
var date = new Date(parseInt(jsonDate.substr(6)));
substr()函数取出/Date(部分),parseInt()函数获取整数并忽略结尾处的)/。生成的数字被传递到Date构造函数中。
我故意省略了基数(parseInt的第二个参数);请看我下面的评论。
此外,我完全同意Rory的评论:ISO-8601日期比这种旧格式更可取,因此这种格式通常不应用于新的开发。
对于ISO-8601格式的JSON日期,只需将字符串传递到Date构造函数:
var date = new Date(jsonDate); //no ugly parsing needed; full timezone support
所有这些答案都有一个共同点:它们都将日期存储为单个值(通常是字符串)。
另一种选择是利用JSON的固有结构,将日期表示为数字列表:
{ "name":"Nick",
"birthdate":[1968,6,9] }
当然,你必须确保对话的两端都同意格式(年、月、日),以及哪些字段是日期,。。。但是它具有完全避免日期到字符串转换问题的优点。都是数字,根本没有字符串。此外,使用顺序:年、月、日也允许按日期进行正确排序。
只需跳出框来思考——JSON日期不必存储为字符串。
这样做的另一个好处是,通过利用CouchDB处理数组值查询的方式,您可以轻松(高效)选择给定年份或月份的所有记录。
您还可以使用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');