如何格式化microsoft json日期?

qmb5sa22  于 2021-09-29  发布在  Java
关注(0)|答案(20)|浏览(615)

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

/Date(1224043200000)/

从一个对json完全陌生的人-我如何将其格式化为短日期格式?这应该在jquery代码中的某个地方处理吗?我已经试过了 jQuery.UI.datepicker 插件使用 $.datepicker.formatDate() 没有任何成功。
仅供参考:以下是我结合以下答案提出的解决方案:

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;
}

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

bxjv4tth

bxjv4tth16#

单击此处查看演示

javascript/jquery

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”

toiithl6

toiithl617#

不要重复自己-使用$.parsejson()自动进行日期转换

您的帖子的答案提供了手动日期转换为javascript日期。我已经扩展了jquery的 $.parseJSON() 只要一点点,所以当您指示它时,它能够自动解析日期。它处理asp.net格式的日期( /Date(12348721342)/ )以及iso格式的日期( 2010-01-01T12.34.56.789Z )浏览器(以及json2.js之类的库)中的本机json函数支持的。
无论如何如果你不想一次又一次地重复你的日期转换代码,我建议你阅读这篇博客文章,并获得代码,这将使你的生活更轻松。

tez616oj

tez616oj18#

最初的例子是:

/Date(1224043200000)/

使用内置json序列化通过wcf rest发送日期时,不反映wcf使用的格式(至少在.net 3.5和sp1上)
我发现这里的答案很有用,但需要对正则表达式稍加修改,因为时区gmt偏移量似乎被附加到wcf json中返回的数字(自1970年以来)上。
在wcf服务中,我有:

[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

apptvisitlinkinfo的定义很简单:

public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

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

/Date(1224043200000-0600)/

请注意,时区偏移包含在值中。
修改后的正则表达式:

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

它更急切地抓住了双方之间的一切,而不仅仅是第一个数字。生成的时间sinze 1970,加上时区偏移都可以输入eval以获得日期对象。
替换的javascript结果行是:

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

5jdjgkvh19#

对于使用newtonsoft json.net的用户,请阅读ie8、firefox 3.5和json.net中的本机json。
另外,关于更改json.net编写的日期格式的文档也很有用:使用json.net序列化日期
对于那些太懒的人,这里有一些快速的步骤。由于json有一个松散的datetime实现,您需要使用 IsoDateTimeConverter() . 请注意,由于json.net 4.5的默认日期格式是iso,因此不需要下面的代码。

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

json将作为

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

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

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;
}

我是这样用的

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

niwlg2el20#

您可以使用此选项从json获取日期:

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

然后,您可以使用javascript日期格式脚本(缩小和压缩时为1.2kb)根据需要显示它。

相关问题