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

时间:2021-09-23 22:08:36
服务器端对一个装有 Person 类型的强类型集合进行了序列化,如下格式
Jquery对时间进行处理--/Date(1351570839583+0800)

客户端采用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对时间进行处理--/Date(1351570839583+0800)
10个Person对象都显示在了table中,但是你会发现 生日这一列js解析成了字符串 Jquery对时间进行处理--/Date(1351570839583+0800)
回头看下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)"))代替.

运行后结果:
姓名 年龄 性别 生日
xxxx0 20 Wed Oct 31 16:38:35 UTC+0800 2012
xxxx1 21 Thu Nov 1 16:38:35 UTC+0800 2012
xxxx2 22 Fri Nov 2 16:38:35 UTC+0800 2012
xxxx3 23 Sat Nov 3 16:38:35 UTC+0800 2012
xxxx4 24 Sun Nov 4 16:38:35 UTC+0800 2012
xxxx5 25 Mon Nov 5 16:38:35 UTC+0800 2012
xxxx6 26 Tue Nov 6 16:38:35 UTC+0800 2012
xxxx7 27 Wed Nov 7 16:38:35 UTC+0800 2012
xxxx8 28 Thu Nov 8 16:38:35 UTC+0800 2012
xxxx9 29 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)"))) 代替

运行结果:
姓名 年龄 性别 生日
xxxx0 20 2012-10-31-16:42:56
xxxx1 21 2012-11-1-16:42:56
xxxx2 22 2012-11-2-16:42:56
xxxx3 23 2012-11-3-16:42:56
xxxx4 24 2012-11-4-16:42:56
xxxx5 25 2012-11-5-16:42:56
xxxx6 26 2012-11-6-16:42:56
xxxx7 27 2012-11-7-16:42:56
xxxx8 28 2012-11-8-16:42:56
xxxx9 29 2012-11-9-16:42:56

ok ,这样的时间就是我们需要的