Jquery对时间进行处理--/Date(1351570839583+0800)

来源:互联网 发布:江西填湖广知乎 编辑:程序博客网 时间:2024/05/21 07:08
服务器端对一个装有 Person 类型的强类型集合进行了序列化,如下格式
jquery <wbr>接收 <wbr>json <wbr>格式数据 <wbr>转化时间类型输出

客户端采用Jquery 的ajax 方法接收 json 数据源
$.ajax({
                url: 'ajax.aspx',
                type: 'post',
                dataType: 'json',
                data: 'ajaxType=list',
                success: function (json) {
                    for (var i = 0; i < json.length; i++) {
                        var tr = '<tr><td>' + json[i].Name + '</td><td>' + json[i].Age + '</td><td>' + json[i].Six + '</td><td>' + json[i].Birthday + '</td></tr>';
                        $("#table").append(tr);
                    }
                }
            });
上面的方法首先标识接收数据类型 dataType:'json'
页面上有个ID为 table 的table,我将解析出的json数据Append到table中,运行输出结果如下.
jquery <wbr>接收 <wbr>json <wbr>格式数据 <wbr>转化时间类型输出
10个Person对象都显示在了table中,但是你会发现 生日这一列js解析成了字符串jquery <wbr>接收 <wbr>json <wbr>格式数据 <wbr>转化时间类型输出
回头看下json中 生日这列序列号后的字符串是:"\/Date(1352440747528+0800)\/"  这确实是个UTC时间,1352440747528 表示 1970年1月1日以来的毫秒数,+0800(或者-0800) +,- 符号加 4位数字表示东/西时区

但是js脚本并不会把上面的时间字符串转化为时间类型,必须我们手动去处理一下.

解决方案:替换字符串
ajax接收解析Birthday时,需要替换一下字符,如下代码
json[i].Birthday 用 eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))代替.

运行后结果:
姓名年龄性别生日xxxx020女Wed Oct 31 16:38:35 UTC+0800 2012xxxx121男Thu Nov 1 16:38:35 UTC+0800 2012xxxx222女Fri Nov 2 16:38:35 UTC+0800 2012xxxx323男Sat Nov 3 16:38:35 UTC+0800 2012xxxx424女Sun Nov 4 16:38:35 UTC+0800 2012xxxx525男Mon Nov 5 16:38:35 UTC+0800 2012xxxx626女Tue Nov 6 16:38:35 UTC+0800 2012xxxx727男Wed Nov 7 16:38:35 UTC+0800 2012xxxx828女Thu Nov 8 16:38:35 UTC+0800 2012xxxx929男Fri Nov 9 16:38:35 UTC+0800 2012

看了后一样纠结,这样的时间类型并不是我们需要的,多希望转化成 2012-10-31-16:39:39 这样的时间格式,看来我们还需要一个函数把 Wed Oct 31 16:38:35 UTC+0800 2012 这样的时间转化为 2012-10-31-16:39:39
方法网上就有现成的,下面贴出来
function utcToDate(utcCurrTime) {
            utcCurrTime = utcCurrTime + "";
            var date = "";
            var month = new Array();
            month["Jan"] = 1;
            month["Feb"] = 2;
            month["Mar"] = 3;
            month["Apr"] = 4;
            month["May"] = 5;
            month["Jun"] = 6;
            month["Jul"] = 7;
            month["Aug"] = 8;
            month["Sep"] = 9;
            month["Oct"] = 10;
            month["Nov"] = 11;
            month["Dec"] = 12;
            var week = new Array();
            week["Mon"] = "一";
            week["Tue"] = "二";
            week["Wed"] = "三";
            week["Thu"] = "四";
            week["Fri"] = "五";
            week["Sat"] = "六";
            week["Sun"] = "日";

            str = utcCurrTime.split(" ");
            date = str[5] + "-";
            date = date + month[str[1]] + "-" + str[2] + "-" + str[3];
            return date;
        }

那么下一步就在输出生日的地方再调用一下这个函数就ok了
将 eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))
用 utcToDate(eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))) 代替

运行结果:
姓名年龄性别生日xxxx020女2012-10-31-16:42:56xxxx121男2012-11-1-16:42:56xxxx222女2012-11-2-16:42:56xxxx323男2012-11-3-16:42:56xxxx424女2012-11-4-16:42:56xxxx525男2012-11-5-16:42:56xxxx626女2012-11-6-16:42:56xxxx727男2012-11-7-16:42:56xxxx828女2012-11-8-16:42:56xxxx929男2012-11-9-16:42:56
ok ,这样的时间就是我们需要的
原创粉丝点击