我将使用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;
}
此解决方案从回调方法获取我的对象,并使用日期格式库在页面上正确显示日期。
20条答案
按热度按时间wkyowqbh1#
eval()
没有必要。这很好:这个
substr()
函数将/Date(
部分,以及parseInt()
函数获取整数并忽略)/
最后。生成的数字被传递到Date
构造器。我故意省略了基数(第二个参数)
parseInt
); 见下面我的评论。此外,我完全同意rory的意见:iso-8601日期比旧格式更受欢迎,因此新开发通常不应使用这种格式。
对于iso-8601格式的json日期,只需将字符串传递到
Date
建造商:niwlg2el2#
您可以使用此选项从json获取日期:
然后,您可以使用javascript日期格式脚本(缩小和压缩时为1.2kb)根据需要显示它。
5jdjgkvh3#
对于使用newtonsoft json.net的用户,请阅读ie8、firefox 3.5和json.net中的本机json。
另外,关于更改json.net编写的日期格式的文档也很有用:使用json.net序列化日期
对于那些太懒的人,这里有一些快速的步骤。由于json有一个松散的datetime实现,您需要使用
IsoDateTimeConverter()
. 请注意,由于json.net 4.5的默认日期格式是iso,因此不需要下面的代码。json将作为
最后,使用一些javascript将iso日期转换为javascript日期:
我是这样用的
tez616oj4#
最初的例子是:
使用内置json序列化通过wcf rest发送日期时,不反映wcf使用的格式(至少在.net 3.5和sp1上)
我发现这里的答案很有用,但需要对正则表达式稍加修改,因为时区gmt偏移量似乎被附加到wcf json中返回的数字(自1970年以来)上。
在wcf服务中,我有:
apptvisitlinkinfo的定义很简单:
当“field2”作为json从服务返回时,值为:
请注意,时区偏移包含在值中。
修改后的正则表达式:
它更急切地抓住了双方之间的一切,而不仅仅是第一个数字。生成的时间sinze 1970,加上时区偏移都可以输入eval以获得日期对象。
替换的javascript结果行是:
toiithl65#
不要重复自己-使用$.parsejson()自动进行日期转换
您的帖子的答案提供了手动日期转换为javascript日期。我已经扩展了jquery的
$.parseJSON()
只要一点点,所以当您指示它时,它能够自动解析日期。它处理asp.net格式的日期(/Date(12348721342)/
)以及iso格式的日期(2010-01-01T12.34.56.789Z
)浏览器(以及json2.js之类的库)中的本机json函数支持的。无论如何如果你不想一次又一次地重复你的日期转换代码,我建议你阅读这篇博客文章,并获得代码,这将使你的生活更轻松。
bxjv4tth6#
单击此处查看演示
javascript/jquery
结果-“10/15/2008”
gg58donl7#
如果你用javascript说,
您将看到它是正确的日期,并且您可以在javascript代码中的任何地方将其用于任何框架。
qxsslcnc8#
更新
我们有一个内部ui库,它必须同时处理microsoft的asp.net内置json格式,如
/Date(msecs)/
,最初在这里被问及,大多数json的日期格式包括json.net,如2014-06-22T00:00:00.0
. 此外,我们还需要处理oldie无法处理小数点后3位以外的任何内容。我们首先检测我们使用的日期类型,将其解析为普通javascript
Date
对象,然后将其格式化。1) 检测microsoft日期格式
2) 检测iso日期格式
3) 解析ms日期格式:
4) 解析iso日期格式。
我们至少有办法确保我们处理的是标准iso日期或修改为始终有三个毫秒位置的iso日期(见上文),因此代码因环境而异。
4a)解析标准iso日期格式,处理oldie的问题:
4b)解析具有固定小数点后3毫秒的iso格式-更容易:
5) 格式:
6) 将所有这些联系在一起:
下面的旧答案对于将此日期格式绑定到jquery自己的json解析中非常有用,这样您就可以得到日期对象而不是字符串,或者如果您仍然在jquery<1.5中挣扎的话。
旧答案
如果在asp.net mvc中使用jquery 1.4的ajax功能,则可以通过以下方式将所有日期时间属性转换为日期对象:
在jQuery1.5中,可以避免重写
parseJSON
方法,通过在ajax调用中使用converters选项全局执行。http://api.jquery.com/jquery.ajax/
不幸的是,为了获得全局解析的日期,您必须切换到较旧的eval路径——否则,您需要在解析后根据具体情况进行转换。
2vuwiymt9#
json中没有内置的日期类型。这看起来像是某个历元的秒/毫秒数。如果您知道纪元,您可以通过添加适当的时间量来创建日期。
flvtvl5010#
我还必须寻找解决这个问题的方法,最终我遇到了momente.js,它是一个很好的库,可以解析这个日期格式以及更多内容。
它让我省去了一些头痛,所以我想我会和你分享它。:)
您可以在此处找到有关它的更多信息:http://momentjs.com/
k10s72fa11#
最后,我将“字符”添加到panos的正则表达式中,以消除microsoft serializer在将对象写入内联脚本时生成的字符:
如果你的c代码中有一个属性
在你的aspx里你有
你会得到这样的结果
注意双引号。
为了将其转换为eval将正确反序列化的表单,我使用了:
我使用原型,并使用它,我补充说
db2dz4w812#
在jQuery1.5中,只要您有json2.js来覆盖较旧的浏览器,您就可以按如下方式反序列化来自ajax的所有日期:
我包含的逻辑假设您以utc(您应该这样做)的形式从服务器发送所有日期;然后消费者会得到一个javascript
Date
对象,该对象具有适当的刻度值以反映此情况。就是打电话getUTCHours()
,等。将返回与服务器上相同的值,并调用getHours()
将返回由浏览器确定的用户本地时区中的值。这并没有考虑到带有时区偏移的wcf格式,尽管这相对容易添加。
t30tvxxf13#
使用jquery ui日期选择器-只有在已经包含jquery ui时才有意义:
输出:
2008年10月15日
os8fio9y14#
别想太多了。就像我们几十年来所做的那样,从1970年1月1日午夜gmt/utc/&c这一事实上的标准纪元开始,以秒(或毫秒)为单位传递一个数字偏移量。javascript喜欢它,java喜欢它,c喜欢它,互联网也喜欢它。
jogvjijk15#
所有这些答案都有一个共同点:它们都将日期存储为单个值(通常是字符串)。
另一种选择是利用json的固有结构,将日期表示为数字列表:
当然,您必须确保对话的两端都同意格式(年、月、日),以及哪些字段是日期,。。。但它的优点是完全避免了日期到字符串转换的问题。都是数字,根本没有字符串。此外,使用顺序:年、月、日还允许按日期进行适当排序。
只需跳出框框思考——json日期不必存储为字符串。
这样做的另一个好处是,通过利用couchdb处理数组值查询的方式,您可以轻松(高效)选择给定年份或月份的所有记录。