jQuery技术:为什么这个DateParser在Safari中不起作用?

我渲染这个JSON对象:

[{"created_at":"2010-09-21T20:41:28Z","subject":"hello world"}] 

然后我使用这个日期解析器来解析它(见下文),但它只适用于Chrome 6.0.4,Firefox 3.6.8,但不适用于Safari 5.0.2 —我收到NaN错误。 是什么赋予了?

  Date.prototype.toRelativeTime = function(now_threshold) { var delta = new Date() - this; now_threshold = parseInt(now_threshold, 10); if (isNaN(now_threshold)) { now_threshold = 0; } if (delta  ms second: 1000, // ms -> sec minute: 60, // sec -> min hour: 60, // min -> hour day: 24, // hour -> day month: 30, // day -> month (roughly) year: 12 // month -> year }; for (var key in conversions) { if (delta < conversions[key]) { break; } else { units = key; // keeps track of the selected key over the iteration delta = delta / conversions[key]; } } // pluralize a unit when the difference is greater than 1. delta = Math.floor(delta); if (delta !== 1) { units += "s"; } return [delta, units, "ago"].join(" "); }; /* * Wraps up a common pattern used with this plugin whereby you take a String * representation of a Date, and want back a date object. */ Date.fromString = function(str) { return new Date(Date.parse(str)); }; 

    问题是Date构造函数对ISO 8601的支持并不存在于所有Web浏览器中。 您可以执行以下操作:

     Date.prototype.setISO8601 = function (string) { var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(.([0-9]+))?)?" + "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?"; var d = string.match(new RegExp(regexp)); var offset = 0; var date = new Date(d[1], 0, 1); if (d[3]) { date.setMonth(d[3] - 1); } if (d[5]) { date.setDate(d[5]); } if (d[7]) { date.setHours(d[7]); } if (d[8]) { date.setMinutes(d[8]); } if (d[10]) { date.setSeconds(d[10]); } if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); } if (d[14]) { offset = (Number(d[16]) * 60) + Number(d[17]); offset *= ((d[15] == '-') ? 1 : -1); } offset -= date.getTimezoneOffset(); time = (Number(date) + (offset * 60 * 1000)); this.setTime(Number(time)); } 

    那么你的代码看起来像这样:

     var d = new Date("2010-09-13T11:51:50.9418504+02:00"); if (isNaN(d)) { //alert("Date constructor not support ISO8601!"); d = new Date(); d.setISO8601("2010-09-13T11:51:50.9418504+02:00"); } 

    代码不是来自我。 我在互联网上找到它,但我找不到原始来源。

    我想在第一个答案中添加一些词语:

    首先,答案是完美的。 我希望有人可以告诉我更多关于它的来源?

    其次,正则表达式中存在一些错误:

    我更正了正则表达式,除了第三点(因为没有时间进行测试):

     var regexp = "^([0-9]{4})(-([0-9]{2})(-([0-9]{2})" + "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" + "(Z|(([-+])([0-9]{2}):?([0-9]{2})))?)?)?)?$"; 

     Tue, 21 Sep 2010 20:06:45 UTC +00:00 

    是一个人类可读的表示forms,ActiveSupport永远不会使用该格式将日期转换为JSON,除非你修改它(但不推荐)。

    但是,您可以使用config.active_support.use_standard_json_time_format选项来切换标准的json时间格式 。 如果为true ,Rails将使用类似XML的日期表示。 否则,它将使用自定义格式。

    这是源代码

    需要了解更多jQuery教程分享为什么这个DateParser在Safari中不起作用?,都可以关注jQuery技术分享栏目—计算机技术网(www.ctvol.com)!

     class Time def as_json(options = nil) #:nodoc: if ActiveSupport.use_standard_json_time_format xmlschema else %(#{strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) end end end 

      以上就是jQuery教程分享为什么这个DateParser在Safari中不起作用?相关内容,想了解更多jQuery开发(异常处理)及jQuery教程关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/jquerytutorial/982358.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐