亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

解決json日期格式問題的3種方法

2019-11-20 21:10:17
字體:
來源:轉載
供稿:網友

開發中有時候需要從服務器端返回json格式的數據,在后臺代碼中如果有DateTime類型的數據使用系統自帶的工具類序列化后將得到一個很長的數字表示日期數據,如下所示:

復制代碼 代碼如下:

//設置服務器響應的結果為純文本格式
            context.Response.ContentType = "text/plain";
           //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",
                    Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",
                    Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",
                    Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //javascript序列化器
            JavaScriptSerializer jss=new JavaScriptSerializer();
           //序列化學生集合對象得到json字符
            string studentsJson=jss.Serialize(students);
           //將字符串響應到客戶端
            context.Response.Write(studentsJson);
           context.Response.End();

運行結果是:

其中Tom所對應生日“2014-01-31”變成了1391141532000,這其實是1970 年 1 月 1 日至今的毫秒數;1391141532000/1000/60/60/24/365=44.11年,44+1970=2014年,按這種方法可以得出年月日時分秒和毫秒。這種格式是一種可行的表示形式但不是普通人可以看懂的友好格式,怎么讓這個格式變化?

解決辦法:

方法1:在服務器端將日期格式使用Select方法或LINQ表達式轉換后發到客戶端:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Web;

using System.Web.Script.Serialization;

namespace JsonDate1
{
    using System.Linq;

    /// <summary>
    /// 學生類,測試用
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public String Name { get; set; }

        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday { get; set; }
    }

    /// <summary>
    /// 返回學生集合的json字符
    /// </summary>
    public class GetJson : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //設置服務器響應的結果為純文本格式
            context.Response.ContentType = "text/plain";
            //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //使用Select方法重新投影對象集合將Birthday屬性轉換成一個新的屬性
            //注意屬性變化后要重新命名,并立即執行
            var studentSet =
                students.Select
                (
                p => new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") }
                ).ToList();

            //javascript序列化器
            JavaScriptSerializer jss = new JavaScriptSerializer();
            //序列化學生集合對象得到json字符
            string studentsJson = jss.Serialize(studentSet);
            //將字符串響應到客戶端
            context.Response.Write(studentsJson);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


Select方法重新投影對象集合將Birthday屬性轉換成一個新的屬性,注意屬性變化后要重新命名,屬性名可以相同;這里可以使用select方法也可以使用LINQ查詢表達式,也可以選擇別的方式達到相同的目的;這種辦法可以將集合中客戶端不用的屬性剔除,達到簡單優化性能的目的。

運行結果:

這時候的日期格式就已經變成友好格式了,不過在javascript中這只是一個字符串。

方法二:

在javascript中將"Birthday":"http://Date(1391141532000)//"中的字符串轉換成javascript中的日期對象,可以將Birthday這個Key所對應的Value中的非數字字符以替換的方式刪除,到到一個數字1391141532000,然后實例化一個Date對象,將1391141532000毫秒作為參數,得到一個javascript中的日期對象,代碼如下:

復制代碼 代碼如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>json日期格式處理</title>
    <script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
            $.getJSON("getJson.ashx", function (students) {
                $.each(students, function (index, obj) {
                    $("<li/>").html(obj.Name).appendTo("#ulStudents");

                    //使用正則表達式將生日屬性中的非數字(/D)刪除
                    //并把得到的毫秒數轉換成數字類型
                    var birthdayMilliseconds = parseInt(obj.Birthday.replace(//D/igm, ""));
                    //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數為參數
                    var birthday = new Date(birthdayMilliseconds);

                    $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents"); ;
                });
            });
        });
    </script>
</head>
<body>
    <h2>json日期格式處理</h2>
    <ul id="ulStudents">
    </ul>
</body>
</html>

運行結果:

上的使用正則//D/igm達到替換所有非數字的目的,/D表示非數字,igm是參數,分別表示忽視(ignore)大小寫;多次、全局(global)替換;多行替換(multi-line);有一些時候還會出現+86的情況,只需要變換正則同樣可以達到目的。另外如果項目中反復出現這種需要處理日期格式的問題,可以擴展一個javascript方法,代碼如下:

復制代碼 代碼如下:

$(function () {
            $.getJSON("getJson.ashx", function (students) {
                $.each(students, function (index, obj) {
                  $("<li/>").html(obj.Name).appendTo("#ulStudents");

                  //使用正則表達式將生日屬性中的非數字(/D)刪除
                    //并把得到的毫秒數轉換成數字類型
                    var birthdayMilliseconds = parseInt(obj.Birthday.replace(//D/igm, ""));
                  //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數為參數
                    var birthday = new Date(birthdayMilliseconds);

                  $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents");
                  $("<li/>").html(obj.Birthday.toDate()).appendTo("#ulStudents");
                });
            });
        });

        //在String對象中擴展一個toDate方法,可以根據要求完善
        String.prototype.toDate = function () {
            var dateMilliseconds;
            if (isNaN(this)) {
                //使用正則表達式將日期屬性中的非數字(/D)刪除
                dateMilliseconds =this.replace(//D/igm, "");
            } else {
                dateMilliseconds=this;
            }
            //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數為參數
            return new Date(parseInt(dateMilliseconds));
        };

上面擴展的方法toDate不一定合理,也不夠強大,可以根據需要修改。

方法三:

可以選擇一些第三方的json工具類,其中不乏有一些已經對日期格式問題已處理好了的,常見的json序列化與反序列化工具庫有:

1.fastJSON.
2.JSON_checker.
3.Jayrock.
4.Json.NET - LINQ to JSON.
5.LitJSON.
6.JSON for .NET.
7.JsonFx.
8.JSONSharp.
9.JsonExSerializer.
10.fluent-json
11.Manatee Json

這里以litjson為序列化與反序列化json的工具類作示例,代碼如下:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Web;

using LitJson;

namespace JsonDate2
{
    using System.Linq;

    /// <summary>
    /// 學生類,測試用
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public String Name { get; set; }

        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday { get; set; }
    }

    /// <summary>
    /// 返回學生集合的json字符
    /// </summary>
    public class GetJson : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //設置服務器響應的結果為純文本格式
            context.Response.ContentType = "text/plain";
            //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //序列化學生集合對象得到json字符
            string studentsJson = JsonMapper.ToJson(students);
            //將字符串響應到客戶端
            context.Response.Write(studentsJson);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

運行結果如下:

這時候的日期格式就基本正確了,只要在javascript中直接實例化日期就好了,

var date = new Date("01/31/2014 12:12:12");
alert(date.toLocaleString());

客戶端的代碼如下:

復制代碼 代碼如下:

$(function () {
            $.getJSON("GetJson2.ashx", function (students) {
                $.each(students, function (index, obj) {
                    $("<li/>").html(obj.Name).appendTo("#ulStudents");

                    var birthday = new Date(obj.Birthday);
                    $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents");
                });
            });
        });

        var date = new Date("01/31/2014 12:12:12");
        alert(date.toLocaleString());

這里講到了三種解決json中序列化后的日期格式問題,應該還有更好更完善的方法,歡迎您告訴我。因為有很多學生問我所以我寫了這點文字,歡迎批評指正。

示例代碼下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美精品suv| 在线看日韩av| 26uuu日韩精品一区二区| 亚洲丁香久久久| 欧美插天视频在线播放| 狠狠躁18三区二区一区| 国产激情综合五月久久| 97视频网站入口| 欧洲亚洲免费在线| 热99在线视频| 国产精品美女av| 一本一本久久a久久精品牛牛影视| 亚洲午夜未删减在线观看| 欧美—级高清免费播放| 亚洲一区二区日本| 亚洲变态欧美另类捆绑| 一区二区三区四区视频| 精品色蜜蜜精品视频在线观看| 日韩美女av在线| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕无线精品亚洲乱码一区| 国产日韩精品在线观看| 91久久久久久国产精品| 国产精品自产拍在线观看中文| 奇门遁甲1982国语版免费观看高清| 日韩精品在线观看视频| 欧美国产视频一区二区| 欧美成人免费大片| 51色欧美片视频在线观看| 国产精品欧美久久久| 一个色综合导航| 91中文字幕在线观看| 日韩av在线天堂网| 亚洲精品久久7777777| 日韩成人性视频| 欧美大片va欧美在线播放| 久久久久久久91| 最近免费中文字幕视频2019| 亚洲精美色品网站| 日韩成人av一区| 久久九九热免费视频| 在线观看日韩专区| 欧美肥老太性生活视频| 亚洲一品av免费观看| 青青久久av北条麻妃海外网| 亚洲自拍偷拍色图| 亚洲精品视频免费| 亚洲人成啪啪网站| 久久中文精品视频| 国产精品成人免费视频| 欧美黑人一级爽快片淫片高清| 日韩不卡在线观看| 欧美黑人xxx| 91精品国产高清久久久久久| 亚洲欧美激情视频| 亚洲精品v欧美精品v日韩精品| 亚洲成人久久电影| 中文字幕日韩免费视频| 精品中文字幕久久久久久| 尤物九九久久国产精品的分类| 国产精品一久久香蕉国产线看观看| 亚洲日本成人网| www.日韩av.com| 91精品视频在线看| 奇门遁甲1982国语版免费观看高清| 欧美黑人一区二区三区| 久久免费在线观看| 国产精品视频白浆免费视频| 亚洲欧洲在线视频| 一区二区三区视频观看| 欧美野外wwwxxx| 成人福利在线观看| 精品国产精品自拍| 中文字幕亚洲二区| 国产精品在线看| 欧美激情视频网| 在线观看视频亚洲| 久久视频在线看| 日韩精品在线视频| 久久久久国产一区二区三区| 亚洲国产精品久久久久久| 中文字幕亚洲一区二区三区五十路| 中文字幕欧美日韩在线| 精品国产欧美一区二区三区成人| 亚洲精品电影网在线观看| 欧美性受xxxx白人性爽| 欧美成人免费观看| 国产精品免费久久久久影院| 国产精品一区二区三| 日韩中文视频免费在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品美乳在线观看| 亚洲成年人影院在线| 色樱桃影院亚洲精品影院| 日韩一区二区三区在线播放| 午夜美女久久久久爽久久| 欧美精品激情在线| 亚洲欧洲国产伦综合| 国产成人拍精品视频午夜网站| 国产黑人绿帽在线第一区| 91精品国产综合久久香蕉922| 97在线视频免费看| 91亚洲国产成人精品性色| 国语自产精品视频在线看一大j8| 欧美性黄网官网| 国模精品一区二区三区色天香| 欧美一区三区三区高中清蜜桃| 国产亚洲激情视频在线| 成人写真福利网| 91精品视频在线| 亚洲理论在线a中文字幕| 欧美精品在线免费播放| 国产精品亚洲网站| 成人激情视频在线| 成人在线免费观看视视频| 国产不卡精品视男人的天堂| 中文字幕日韩电影| 欧美日韩性视频在线| 欧美多人爱爱视频网站| 久久av中文字幕| 91av在线视频观看| 欧美日本高清一区| 国产精品99久久久久久久久久久久| 欧美丝袜美女中出在线| 国产精品成人观看视频国产奇米| 亚洲韩国青草视频| 日韩免费精品视频| 日韩电影大全免费观看2023年上| 中文字幕亚洲二区| 欧美wwwxxxx| 国产在线拍揄自揄视频不卡99| 亚洲精品成人久久电影| 国产成+人+综合+亚洲欧洲| 91精品国产自产在线观看永久| 2019亚洲男人天堂| 国产精品揄拍一区二区| 992tv成人免费视频| 久久久久久综合网天天| 久久久久久久成人| 欧美一级视频一区二区| 在线看福利67194| 国产亚洲日本欧美韩国| 亚洲成年人影院在线| 亚洲国产天堂久久国产91| 日韩激情片免费| 97精品国产97久久久久久春色| 国产69久久精品成人看| 欧美视频在线看| 久久亚洲精品国产亚洲老地址| 亚洲精品av在线| 亚洲第一av在线| 国产精品91免费在线| 亚洲欧美色婷婷| 国产99视频在线观看| 亚洲国产高清高潮精品美女| 九九热99久久久国产盗摄| 欧美日韩精品国产| 日韩av电影中文字幕| 欧美黄色性视频| 国产精品美女视频网站| 日韩中文字在线| 久久久精品2019中文字幕神马| 国产精品成人一区二区三区吃奶| 中文日韩在线视频|