我将使用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条答案
按热度按时间k10s72fa1#
最后,我将“字符”添加到panos的正则表达式中,以消除microsoft serializer在将对象写入内联脚本时生成的字符:
如果你的c代码中有一个属性
在你的aspx里你有
你会得到这样的结果
注意双引号。
为了将其转换为eval将正确反序列化的表单,我使用了:
我使用原型,并使用它,我补充说
bpzcxfmw2#
我的日期是这样的:
在某些示例中,日期的格式略有不同:
等
因此,我提出了以下regexp:
最后的代码是:
希望能有帮助。
更新:我从microsoft找到了此链接:如何使用json序列化日期?
这似乎是我们都在寻找的。
vu8f3i0k3#
这也可能对你有所帮助。
qhhrdooz4#
有没有其他不使用jquery库的选项?
xfyts7mz5#
这里添加另一种方法,wcf采用的“滴答声方法”很容易出现时区问题,如果您不非常小心,如本文和其他地方所述。因此,我现在使用.net和javascript都支持的iso 8601格式,其中包括时区偏移。详情如下:
在wcf/.net中:
其中creationdate是system.datetime;tostring(“o”)使用.net的往返格式说明符生成符合iso 8601的日期字符串
在javascript中
在检索json之后,我使用接受iso 8601日期字符串的日期构造函数将日期固定为javasript日期对象。。。
一旦有了javascript日期,就可以使用所有方便可靠的日期方法,如todatestring、tolocalestring等。
v64noz0r6#
以超级棒的帖子发布:
jogvjijk7#
所有这些答案都有一个共同点:它们都将日期存储为单个值(通常是字符串)。
另一种选择是利用json的固有结构,将日期表示为数字列表:
当然,您必须确保对话的两端都同意格式(年、月、日),以及哪些字段是日期,。。。但它的优点是完全避免了日期到字符串转换的问题。都是数字,根本没有字符串。此外,使用顺序:年、月、日还允许按日期进行适当排序。
只需跳出框框思考——json日期不必存储为字符串。
这样做的另一个好处是,通过利用couchdb处理数组值查询的方式,您可以轻松(高效)选择给定年份或月份的所有记录。
os8fio9y8#
别想太多了。就像我们几十年来所做的那样,从1970年1月1日午夜gmt/utc/&c这一事实上的标准纪元开始,以秒(或毫秒)为单位传递一个数字偏移量。javascript喜欢它,java喜欢它,c喜欢它,互联网也喜欢它。
t30tvxxf9#
使用jquery ui日期选择器-只有在已经包含jquery ui时才有意义:
输出:
2008年10月15日
db2dz4w810#
在jQuery1.5中,只要您有json2.js来覆盖较旧的浏览器,您就可以按如下方式反序列化来自ajax的所有日期:
我包含的逻辑假设您以utc(您应该这样做)的形式从服务器发送所有日期;然后消费者会得到一个javascript
Date
对象,该对象具有适当的刻度值以反映此情况。就是打电话getUTCHours()
,等。将返回与服务器上相同的值,并调用getHours()
将返回由浏览器确定的用户本地时区中的值。这并没有考虑到带有时区偏移的wcf格式,尽管这相对容易添加。
wkyowqbh11#
eval()
没有必要。这很好:这个
substr()
函数将/Date(
部分,以及parseInt()
函数获取整数并忽略)/
最后。生成的数字被传递到Date
构造器。我故意省略了基数(第二个参数)
parseInt
); 见下面我的评论。此外,我完全同意rory的意见:iso-8601日期比旧格式更受欢迎,因此新开发通常不应使用这种格式。
对于iso-8601格式的json日期,只需将字符串传递到
Date
建造商:flvtvl5012#
我还必须寻找解决这个问题的方法,最终我遇到了momente.js,它是一个很好的库,可以解析这个日期格式以及更多内容。
它让我省去了一些头痛,所以我想我会和你分享它。:)
您可以在此处找到有关它的更多信息:http://momentjs.com/
2vuwiymt13#
json中没有内置的日期类型。这看起来像是某个历元的秒/毫秒数。如果您知道纪元,您可以通过添加适当的时间量来创建日期。
qxsslcnc14#
更新
我们有一个内部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路径——否则,您需要在解析后根据具体情况进行转换。
gg58donl15#
如果你用javascript说,
您将看到它是正确的日期,并且您可以在javascript代码中的任何地方将其用于任何框架。