关于jquery:如何格式化Microsoft JSON日期?

How do I format a Microsoft JSON date?

我将用jquery首次尝试Ajax。我正在将数据放到页面上,但是对于为日期数据类型返回的JSON数据,我遇到了一些问题。基本上,我得到了一个像这样的字符串:

1
/Date(1224043200000)/

从一个全新的人到JSON——我如何将其格式化为短日期格式?应该在jquery代码中的某个地方处理这个问题吗?我尝试过使用$.datepicker.formatDate()jQuery.UI.datepicker插件,但没有成功。

仅供参考:以下是我使用以下答案组合得出的解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}

此解决方案从回调方法获取我的对象,并使用日期格式库在页面上正确显示日期。


不需要评估。这样做很好:

1
var date = new Date(parseInt(jsonDate.substr(6)));

substr函数提取"/date"("part",parseint函数获取整数并忽略末尾的")/"。生成的数字将传递给日期构造函数。

编辑:我故意省略了基数(parseint的第二个参数);请参阅下面的注释。另外,我完全同意Rory的评论:ISO-8601日期比旧格式更受欢迎——所以这种格式一般不应该用于新的开发。请参阅优秀的json.net库,以获取使用ISO-8601格式序列化日期的伟大替代方案。

对于ISO-8601格式的JSON日期,只需将字符串传递给日期构造函数:

1
var date = new Date(jsonDate); //no ugly parsing needed; full timezone support


您可以使用它从JSON获取日期:

1
var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi,"new Date($1)"));

然后,您可以使用一个javascript日期格式脚本(缩小和gzip时为1.2kb)来显示您想要的内容。


对于使用newtonsoft json.net的用户,请阅读IE8、Firefox 3.5和json.net中的本地json。

此外,有关更改json.net编写的日期格式的文档也很有用:用json.net序列化日期

对于那些太懒惰的人,下面是快速的步骤。由于JSON有一个松散的日期时间实现,因此需要使用IsoDateTimeConverter()。注意,由于json.net 4.5的默认日期格式是iso,因此不需要下面的代码。

1
string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

JSON将通过

1
"fieldName":"2009-04-12T20:44:55"

最后,一些javascript将iso日期转换为javascript日期:

1
2
3
4
5
6
7
8
9
10
function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

我是这样用的

1
$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);


原始示例:

1
/Date(1224043200000)/

不反映使用内置JSON序列化通过WCF REST发送日期时WCF使用的格式。(至少在.NET 3.5、SP1上)

我发现这里的答案很有帮助,但是需要对regex进行一点编辑,因为似乎时区gmt偏移量被附加到wcf json中返回的数字上(自1970年以来)。

在WCF服务中,我有:

1
2
3
4
5
6
7
[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

AppTvisitLinkInfo的定义很简单:

1
2
3
4
5
public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

当"field2"作为json从服务返回时,值为:

1
/Date(1224043200000-0600)/

请注意,该值中包含时区偏移量。

修改后的regex:

1
/\/Date\((.*?)\)\//gi

它比第一个数字更抢手,能抓住帕伦斯之间的一切。产生的时间sinze 1970,加上时区偏移量都可以输入到eval中以获取日期对象。

替换的javascript结果行是:

1
replace(/\/Date\((.*?)\)\//gi,"new Date($1)");


不要重复-使用$.parseJSON()自动转换日期

对您的文章的回答提供了到javascript日期的手动日期转换。我只扩展了jquery的$.parseJSON()一点点,所以当您指示它时,它能够自动解析日期。它处理ASP.NET格式的日期(/Date(12348721342)/和ISO格式的日期(2010-01-01T12.34.56.789Z),这些日期由浏览器中的本地JSON函数(以及json2.js等库)支持。

不管怎样。如果你不想一次又一次地重复你的日期转换代码,我建议你读一下这篇博文,并获得能让你的生活更轻松的代码。


如果你用javascript说,

1
2
var thedate = new Date(1224043200000);
alert(thedate);

您将看到它是正确的日期,并且您可以在任何框架中的JavaScript代码中的任何地方使用它。


单击此处查看演示javascript/jquery

1
2
3
4
5
6
7
8
9
10
11
var = MyDate_String_Value ="/Date(1224043200000)/"
var value = new Date
            (
                 parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
            );
var dat = value.getMonth() +
                         1 +
                      "/" +
           value.getDate() +
                      "/" +
       value.getFullYear();

结果-"10/15/2008"


更新的

我们有一个内部的UI库,它必须同时处理微软的ASP.NET内置JSON格式(如/Date(msecs)/格式)和大多数JSON的日期格式(包括json.net的日期格式,如2014-06-22T00:00:00.0格式)。此外,我们还需要解决Oldie除了小数点后3位以外的任何问题。

我们首先检测我们在使用什么类型的数据,将其解析为一个普通的javascript Date对象,然后将其格式化。

1)检测Microsoft日期格式

1
2
3
4
// Handling of Microsoft AJAX Dates, formatted like '/Date(01238329348239)/'
function looksLikeMSDate(s) {
    return /^\/Date\(/.test(s);
}

2)检测ISO日期格式

1
2
3
4
5
var isoDateRegex = /^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d\d?\d?)?([\+-]\d\d:\d\d|Z)?$/;

function looksLikeIsoDate(s) {
    return isoDateRegex.test(s);
}

3)解析MS日期格式:

1
2
3
4
function parseMSDate(s) {
    // Jump forward past the /Date(, parseInt handles the rest
    return new Date(parseInt(s.substr(6)));
}

4)分析ISO日期格式。

我们至少有一种方法可以确保我们处理的是标准的ISO日期或修改为总是有3毫秒位置的ISO日期(见上文),因此根据环境,代码是不同的。

4a)解析标准的ISO日期格式,处理旧的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function parseIsoDate(s) {
    var m = isoDateRegex.exec(s);

    // Is this UTC, offset, or undefined? Treat undefined as UTC.
    if (m.length == 7 ||                // Just the y-m-dTh:m:s, no ms, no tz offset - assume UTC
        (m.length > 7 && (
            !m[7] ||                    // Array came back length 9 with undefined for 7 and 8
            m[7].charAt(0) != '.' ||    // ms portion, no tz offset, or no ms portion, Z
            !m[8] ||                    // ms portion, no tz offset
            m[8] == 'Z'))) {            // ms portion and Z
        // JavaScript's weirdo date handling expects just the months to be 0-based, as in 0-11, not 1-12 - the rest are as you expect in dates.
        var d = new Date(Date.UTC(m[1], m[2]-1, m[3], m[4], m[5], m[6]));
    } else {
        // local
        var d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]);
    }

    return d;
}

4b)使用固定的3毫秒小数位解析ISO格式-更容易:

1
2
3
function parseIsoDate(s) {
    return new Date(s);
}

5)格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function hasTime(d) {
    return !!(d.getUTCHours() || d.getUTCMinutes() || d.getUTCSeconds());
}

function zeroFill(n) {
    if ((n + '').length == 1)
        return '0' + n;

    return n;
}

function formatDate(d) {
    if (hasTime(d)) {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
        s += ' ' + d.getHours() + ':' + zeroFill(d.getMinutes()) + ':' + zeroFill(d.getSeconds());
    } else {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
    }

    return s;
}

6)把它们绑在一起:

1
2
3
4
5
6
7
8
9
10
11
function parseDate(s) {
    var d;
    if (looksLikeMSDate(s))
        d = parseMSDate(s);
    else if (looksLikeIsoDate(s))
        d = parseIsoDate(s);
    else
        return null;

    return formatDate(d);
}

下面的旧答案对于将此日期格式绑定到jquery自己的json解析中很有用,这样您就可以得到日期对象而不是字符串,或者如果您仍然困在jquery<1.5中,不知何故。

旧答案

如果将jquery 1.4的Ajax函数与ASP.NET MVC一起使用,则可以使用以下命令将所有日期时间属性转换为日期对象:

1
2
3
4
5
6
7
8
9
10
// Once
jQuery.parseJSON = function(d) {return eval('(' + d + ')');};

$.ajax({
    ...
    dataFilter: function(d) {
        return d.replace(/"\\\/(Date\(-?\d+\))\\\/"/g, 'new $1');
    },
    ...
});

在jquery 1.5中,通过在Ajax调用中使用converters选项,可以避免全局覆盖parseJSON方法。

http://api.jquery.com/jquery.ajax/

不幸的是,您必须切换到旧的eval路由,以便获得全局分析的日期-否则,您需要在分析后根据具体情况进行转换。


我还必须寻找这个问题的解决方案,最后我遇到了moment.js,它是一个很好的库,可以解析这个日期格式等等。

1
var d = moment(yourdatestring)

它让我省去了一些头痛,所以我想和你分享它。:)你可以在这里找到更多关于它的信息:http://momentjs.com/


最后,我将"字符添加到panos的正则表达式中,以消除在将对象写入内联脚本时由Microsoft序列化程序生成的字符:

因此,如果您的C代码中有一个属性,那么它类似于

1
protected string JsonObject { get { return jsSerialiser.Serialize(_myObject); }}

在你的ASPX里你有

1
2
<script type="text/javascript">
    var myObject = '<%= JsonObject %>';

你会得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var myObject = '{"StartDate":"\/Date(1255131630400)\/
<hr><P>JSON中没有内置日期类型。这看起来像是某个时代的秒/毫秒数。如果你知道时代,你可以通过添加适当的时间来创建日期。</P><div class="suo-content">[collapse title=""]<ul><li>这是不正确的,JSON使用javascript日期,并添加时区信息——epoch与javascript日期类的epoch相同(原因很明显)。</li><li>@这个答案为JSON没有内置日期类型的断言提供了参考。如果您不同意,请提供其他参考。(你没有想到一个特定的框架决定了一个字符串格式来表示日期,是吗?这不是JSON标准的一部分,事实上,这是不可能的,因为它不可能包含一个不应该作为日期的字符串,但恰好有一组与日期模式匹配的字符。)</li></ul>[/collapse]</div><hr><P>在jquery 1.5中,只要您有json2.js来覆盖旧的浏览器,就可以按如下方式反序列化来自Ajax的所有日期:</P>[cc](function () {
    var DATE_START ="/Date(";
    var DATE_START_LENGTH = DATE_START.length;

    function isDateString(x) {
        return typeof x ==="string" && x.startsWith(DATE_START);
    }

    function deserializeDateString(dateString) {
        var dateOffsetByLocalTime = new Date(parseInt(dateString.substr(DATE_START_LENGTH)));
        var utcDate = new Date(dateOffsetByLocalTime.getTime() - dateOffsetByLocalTime.getTimezoneOffset() * 60 * 1000);
        return utcDate;
    }

    function convertJSONDates(key, value) {
      if (isDateString(value)) {
        return deserializeDateString(value);
      }
      return value;
    }

    window.jQuery.ajaxSetup({
      converters: {
       "text json": function(data) {
          return window.JSON.parse(data, convertJSONDates);
        }
      }
    });
}());

我包含了一个逻辑,假设您以UTC(您应该这样做)的形式从服务器发送所有日期;然后消费者会得到一个javascript Date对象,该对象具有适当的ticks值来反映这一点。也就是说,在日期调用getUTCHours()等将返回与在服务器上相同的值,而调用getHours()将返回由浏览器确定的用户本地时区的值。

这并没有考虑带时区偏移的WCF格式,尽管这相对容易添加。


使用jquery ui datepicker-仅当已经包含jquery ui时才有意义:

1
$.datepicker.formatDate('MM d, yy', new Date(parseInt('/Date(1224043200000)/'.substr(6))));

输出:

October 15, 2008


别想得太多。就像我们已经做了几十年的工作一样,传递一个从1970年1月1日午夜格林尼治标准时间(gmt/utc/&c)开始的实际标准时间(以秒(或毫秒)为单位)的数字偏移量。JavaScript喜欢它,JavaScript喜欢它,C喜欢它,互联网喜欢它。


所有这些答案都有一个共同点:它们都将日期存储为单个值(通常是字符串)。

另一种选择是利用JSON的固有结构,将日期表示为数字列表:

1
2
{"name":"Nick",
 "birthdate":[1968,6,9] }

当然,您必须确保对话的两端在格式(年、月、日)上一致,以及哪些字段是日期……但它的优点是完全避免了日期到字符串转换的问题。都是数字,根本没有字符串。此外,使用顺序:年、月、日也允许按日期进行适当排序。

只需跳出这个框框——JSON日期不必存储为字符串。

这样做的另一个好处是,通过利用CouchDB处理数组值查询的方式,您可以轻松(高效)地选择给定年份或月份的所有记录。


1
var newDate = dateFormat(jsonDate,"mm/dd/yyyy");

在不使用jquery库的情况下还有其他选项吗?


在Awesome线程中发布:

1
2
var d = new Date(parseInt('/Date(1224043200000)/'.slice(6, -2)));
alert('' + (1 + d.getMonth()) + '/' + d.getDate() + '/' + d.getFullYear().toString().slice(-2));


为了在这里添加另一种方法,如果您不十分小心(如本文和其他地方所述),WCF采用的"滴答"方法很容易出现时区问题。所以我现在使用的是i so 8601格式,.net&javascript都适当支持它,包括时区偏移。详情如下:

在WCF/.NET中:

其中creationdate是system.datetime;toString("o")使用.NET的往返格式说明符,该说明符生成符合ISO 8601的日期字符串

1
2
3
new MyInfo {
    CreationDate = r.CreationDate.ToString("o"),
};

在JavaScript中

在检索JSON之后,我会使用接受iso 8601日期字符串的日期构造函数来修正javascript日期对象的日期…

1
2
3
4
5
6
7
8
9
10
$.getJSON(
   "MyRestService.svc/myinfo",
    function (data) {
        $.each(data.myinfos, function (r) {
            this.CreatedOn = new Date(this.CreationDate);
        });
        // Now each myinfo object in the myinfos collection has a CreatedOn field that is a real JavaScript date (with timezone intact).
       alert(data.myinfos[0].CreationDate.toLocaleString());
    }
)

一旦您有了一个javascript日期,您就可以使用所有方便可靠的日期方法,如todatestring、toLocalestring等。


我得到的日期是这样的:

1
"/Date(1276290000000+0300)/"

在一些例子中,日期的格式略有不同:

1
2
"/Date(12762900000000300)/"
"Date(1276290000000-0300)"

等。

所以我提出了以下regexp:

1
/\/+Date\(([\d+]+)\)\/+/

最后的代码是:

1
var myDate = new Date(parseInt(jsonWcfDate.replace(/\/+Date\(([\d+-]+)\)\/+/, '$1')));

希望它有帮助。

更新:我从Microsoft找到此链接:如何用JSON序列化日期?

我们都在找这个。


下面是解析JSON日期的一个非常简单的解决方案。根据您的要求使用以下功能。您只需将获取的JSON格式日期作为参数传递给以下函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function JSONDate(dateStr) {
    var m, day;
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    return (m + '/' + day + '/' + d.getFullYear())
}

function JSONDateWithTime(dateStr) {
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    var m, day;
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    var formattedDate = m +"/" + day +"/" + d.getFullYear();
    var hours = (d.getHours() < 10) ?"0" + d.getHours() : d.getHours();
    var minutes = (d.getMinutes() < 10) ?"0" + d.getMinutes() : d.getMinutes();
    var formattedTime = hours +":" + minutes +":" + d.getSeconds();
    formattedDate = formattedDate +"" + formattedTime;
    return formattedDate;
}


1
2
var obj = eval('(' +"{Date: \/Date(1278903921551)\/}".replace(/\/Date\((\d+)\)\//gi,"new Date($1)") + ')');
var dateValue = obj["Date"];

在页面中添加jquery UI插件:

1
2
3
function DateFormate(dateConvert) {
    return $.datepicker.formatDate("dd/MM/yyyy", eval('new ' + dateConvert.slice(1, -1)));
};

检查最新的ISO标准;类似于:

1
yyyy.MM.ddThh:mm

变为2008.11.20T22:18


您还可以使用javascript library moment.js,当您计划处理不同的本地化格式并使用日期值执行其他操作时,它非常有用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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上获取)添加到项目中并配置语言:

1
moment.lang('de');


这是令人沮丧的。我的解决方案是从ASP.NET的javascriptserializer生成的值中解析出"/和/",这样,尽管JSON可能没有日期文本,但浏览器仍然会将其解释为日期,这正是我真正想要的:{"myDate":Date(123456789)}

为日期时间自定义JavaScriptConverter?

我必须强调罗伊·廷克的评论的准确性。这不是合法的JSON。这是一个肮脏的,肮脏的黑客在服务器上删除问题之前成为一个问题的javascript。它将阻塞JSON解析器。我用它离开地面,但我不再用它了。但是,我仍然认为最好的答案在于更改服务器如何格式化日期,例如,其他地方提到的ISO。


A late post, but for those who searched this post.

Imagine this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    [Authorize(Roles ="Administrator")]
    [Authorize(Roles ="Director")]
    [Authorize(Roles ="Human Resources")]
    [HttpGet]
    public ActionResult GetUserData(string UserIdGuidKey)
    {
        if (UserIdGuidKey!= null)
        {
            var guidUserId = new Guid(UserIdGuidKey);
            var memuser = Membership.GetUser(guidUserId);
            var profileuser = Profile.GetUserProfile(memuser.UserName);
            var list = new {
                              UserName = memuser.UserName,
                              Email = memuser.Email ,
                              IsApproved = memuser.IsApproved.ToString() ,
                              IsLockedOut = memuser.IsLockedOut.ToString() ,
                              LastLockoutDate = memuser.LastLockoutDate.ToString() ,
                              CreationDate = memuser.CreationDate.ToString() ,
                              LastLoginDate = memuser.LastLoginDate.ToString() ,
                              LastActivityDate = memuser.LastActivityDate.ToString() ,
                              LastPasswordChangedDate = memuser.LastPasswordChangedDate.ToString() ,
                              IsOnline = memuser.IsOnline.ToString() ,
                              FirstName = profileuser.FirstName ,
                              LastName = profileuser.LastName ,
                              NickName = profileuser.NickName ,
                              BirthDate = profileuser.BirthDate.ToString() ,
            };
            return Json(list, JsonRequestBehavior.AllowGet);
        }
        return Redirect("Index");
    }

如您所见,我正在利用C 3.0的特性创建"自动"泛型。有点懒惰,但我喜欢它,而且它很管用。请注意:profile是我为Web应用程序项目创建的自定义类。


这也可以帮助你。

1
2
3
4
5
6
 function ToJavaScriptDate(value) { //To Parse Date from the Returned Parsed Date
        var pattern = /Date\(([^)]+)\)/;
        var results = pattern.exec(value);
        var dt = new Date(parseFloat(results[1]));
        return (dt.getMonth() + 1) +"/" + dt.getDate() +"/" + dt.getFullYear();
    }

moootools解决方案:

1
new Date(Date(result.AppendDts)).format('%x')

需要更多的mootools。在Firefox 3.6.3和IE 7.0.5730.13上使用mootools-1.2.3.1进行测试


如果.NET返回…

1
return DateTime.Now.ToString("u"); //"2013-09-17 15:18:53Z"

然后在javascript中…

1
var x = new Date("2013-09-17 15:18:53Z");

仅供参考,对于在服务器端使用python的任何人:datetime.datetime().ctime()返回一个可以由"new date()"本机分析的字符串。也就是说,如果创建一个新的datetime.datetime实例(例如,使用datetime.datetime.now),则该字符串可以包含在JSON字符串中,然后该字符串可以作为第一个参数传递给日期构造函数。我还没有发现任何例外,但我也没有对它进行过严格的测试。


在下面的代码中。我有

1。从日期字符串中检索到时间戳。

2。把它分解成Int

三。最后用它创建了一个Date

1
2
3
4
var dateString ="/Date(1224043200000)/";
var seconds = parseInt(dateString.replace(/\/Date\(([0-9]+)[^+]\//i,"$1"));
var date = new Date(seconds);
console.log(date);


试试这个…

1
2
3
4
5
6
7
8
9
10
11
function formatJSONDate(jsonDate) {
            var date = jsonDate;
            var parsedDate = new Date(parseInt(date.toString().substring(6)));
            var newDate = new Date(parsedDate);
            var getMonth = newDate.getMonth() + 1;
            var getDay = newDate.getDay();
            var getYear = newDate.getFullYear();

            var standardDate = (getMonth<10 ? '0' : '') + getMonth + '/' + (getDay<10 ? '0' : '') + getDay + '/' + getYear;
            return standardDate;
        }

getYear()返回年份-1900,这已经被弃用了一段时间,最好使用getFullYear()。


这将使用正则表达式,并且它也可以工作:

1
var date = new Date(parseInt(/^\/Date\((.*?)\)\/$/.exec(jsonDate)[1], 10));

您可以尝试使用另一个regex示例:

1
2
3
var mydate = json.date
var date = new Date(parseInt(mydate.replace(/\/Date\((-?\d+)\)\//, '$1');
mydate = date.getMonth() + 1 + '/' + date.getDate() + '/' + date.getFullYear();

date.getMonth()返回一个整数0-11,因此我们必须加1才能得到正确的月份数。


很容易将JSON日期转换为javascript日期:

1
2
3
4
5
6
var s = Response.StartDate;    
s = s.replace('/Date(', '');

s = s.replace(')/', '');

var expDate = new Date(parseInt(s));

作为补充说明,Kendoui支持转换Microsoft JSON日期。因此,如果您的项目引用了"kendoui",您可以简单地使用

1
var newDate = kendo.parseDate(jsonDate);

我建议最简单的方法是在JS上使用regex,如下所示:

1
2
3
//Only use [0] if you are sure that the string matches the pattern
//Otherwise, verify if 'match' returns something
"/Date(1512488018202)/".match(/\d+/)[0]

我使用这个简单的函数从Microsoft JSON日期获取数据

1
2
3
function getDateValue(dateVal) {
    return new Date(parseInt(dateVal.replace(/\D+/g, '')));
};

replace(/\D+/g, '')将删除除数字以外的所有字符

parseInt将字符串转换为数字

用法

1
$scope.ReturnDate = getDateValue(result.JSONDateVariable)

JSON可能会返回某种类型的对象(好吧,它的字符串表示形式)。

1
"{ myDate : Date(1224043200000) }"

使用jquery,可以通过以下方式访问数据对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
$.get(
   "myJSONFile.php",
    function (data) {
        // data.myDate will be a date object.

        // to show in a short date format (eg: dd/mm/yyyy)
        alert (
            data.myDate.getDate() +"/"
            + (data.myDate.getMonth() + 1) +"/"
            + data.myDate.getFullYear()
        ); // alerts:"15/10/2008"
    }
);