WCF生成JSON的日期型为:Date(1213545600000 + 0800),该类型为UTC的日期格式,可以通过new Date(1213545600000 + 0800)转化为日期对象,然后获取值。如:(new Date(1213545600000 + 0800)).toLocaleDateString()结果为2008年6月16日。
如果在ExtJs中使用时没有进行转换则会显示NaN年NaN月NaN日
在ExtJs中使用方式如下:
//这个函数演示了怎样把服务器端的DateTime类型转为Javascript的日期
function renderOnLastUpdateDate(value, p, record) {
var jsondate = record.data.lastChange;
return eval("new " + jsondate.substr(1, jsondate.length - 2)).toLocaleDateString();
}
// 创建Grid
var grid = new Ext.grid.GridPanel({
store: store,
columns: [
{ id: 'company', header: "公司", width: 160, sortable: true, dataIndex: 'company' },
{ header: "单价", width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price' },
{ header: "变动", width: 75, sortable: true, renderer: change, dataIndex: 'change' },
{ header: "变动百分比", width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange' },
{ header: "最后更新", width: 100, sortable: true, renderer: renderOnLastUpdateDate, dataIndex: 'lastChange' }
],
stripeRows: true,
autoExpandColumn: 'company',
height: 350,
width: 600,
title: '股市行情',
viewCofig: { columnsText: '列', sortAscText: '升序', sortDescText: '降序' }
});
从ExtJs将日期数据通过JSON方式传送回服务器时,需要将日期转换为UTC格式,转换方法如下:
/**
*ConvertFormValues:转化从表单获取的值(Object)对象为WCF需要的Object
*formvalue:从表的获取的值Object
*datefieldname:表单值的日期型字段名,多个用","分开
*ResultObject :返回值 Object
*/
function ConvertFormValue(formvalue,datefieldname){
var ResultObject = new Object();
for (var prop in formvalue) {
if(datefieldname.indexOf(prop) != -1){
var dt = StrToDate(formvalue[prop]); //字符串转化为日期
ResultObject[prop] = ""/Date("+Date.UTC(dt.getFullYear(),dt.getMonth(),dt.getDate())+")"/"; //转化为UTC日期
}
else if (formvalue[prop] != ""){
ResultObject[prop] = formvalue[prop];
}
}
return ResultObject;
}
/**私有方法**/
function StrToDate(str){
var arys = new Array();
arys=str.split('-');
var newDate=new Date(arys[0],arys[1]-1,arys[2]);
return newDate;
}
可以参考http://www.cnblogs.com/xiaozhuang/archive/2007/12/18/1004382.html