问题 如何格式化Microsoft JSON日期?
我正在接受我的第一次破解 阿贾克斯 用jQuery。我将数据放到我的页面上,但是我在为Date数据类型返回的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;
}
此解决方案从回调方法获取对象,并使用日期格式库正确显示页面上的日期。
9288
2019-05-20 20:57:08
起源
答案:
Eval不是必需的。这样可以正常工作:
var date = new Date(parseInt(jsonDate.substr(6)));
substr函数取出“/ Date(”部分,并且parseInt函数获取整数并忽略最后的“)/”。生成的数字将传递到Date构造函数中。
编辑:我故意遗漏了基数(第二个参数为parseInt);看到 我的评论如下。另外,我完全同意 罗里的评论:ISO-8601日期比旧格式更受欢迎 - 因此这种格式通常不应用于新开发。看到优秀 Json.NET 库是一个很好的选择,使用ISO-8601格式序列化日期。
对于ISO-8601格式的JSON日期,只需将字符串传递给Date构造函数:
var date = new Date(jsonDate); //no ugly parsing needed; full timezone support
1566
您可以使用它来从JSON获取日期:
var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));
然后你可以使用 JavaScript日期格式 脚本(缩小和压缩时为1.2 KB)以根据需要显示它。
115
对于那些使用Newtonsoft的人 Json.NET,阅读如何通过 IE8中的原生JSON,Firefox 3.5加上Json.NET。
另外,有关更改Json.NET编写的日期格式的文档很有用:
使用Json.NET序列化日期
对于那些懒得的人来说,这是快速的步骤。由于JSON具有松散的DateTime实现,因此您需要使用 IsoDateTimeConverter()
。请注意,由于Json.NET 4.5的默认日期格式是ISO,因此不需要下面的代码。
string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());
JSON将通过as
"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);
84
原来的例子:
/Date(1224043200000)/
不反映WCF使用内置JSON序列化通过WCF REST发送日期时使用的格式。 (至少在.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
它稍微有点急切,抓住了parens之间的一切,而不仅仅是第一个数字。产生的时间是1970年的时间,加上时区偏移量都可以输入到eval中以获得日期对象。
替换的JavaScript结果是:
replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
57
不要重复自己 - 使用自动化日期转换 $.parseJSON()
您的帖子的答案提供手动日期转换为JavaScript日期。我扩展了jQuery $.parseJSON()
只是一点点,所以它可以在你指示日期时自动解析日期。它处理ASP.NET格式的日期(/Date(12348721342)/
)以及ISO格式的日期(2010-01-01T12.34.56.789Z
)在浏览器(以及像json2.js这样的库)中由本机JSON函数支持。
无论如何。如果您不想一遍又一遍地重复日期转换代码,我建议您阅读 这篇博文 并获得将使您的生活更轻松的代码。
53
如果你用JavaScript说,
var thedate = new Date(1224043200000);
alert(thedate);
您将看到它是正确的日期,并且您可以在任何框架的JavaScript代码中的任何位置使用它。
50
的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”
47