Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Date.parse 与 ISO 8601 的另一个坑

  前天刚踩了个 ISO 8601 的坑,我躁动的心情还没平静,今天又踩了另一个 ISO 8601 的坑,简直了!ISO 8601 明明是这么标准的东西,但却有这么多坑。今天发现代码在 Safari 上跑不了,其它现代浏览器上正常,原因就是 Safari 只能解析它自己的格式,唉。
  我一直都很讨厌 Safari,这回我更加讨厌了 Safari。我们上次根据当前时区来生成一个带时区的 ISO 8601 字符串,这本身是一个标准格式,连 PHP 这万年蛋疼的语言都支持解析这个标准格式。但神奇的 Safari 既然给我罢工了!


  于是,再次手动解决这个问题吧。这个世界太真是太混乱了。 void function(){
  // 保存旧方法
  var parse=Date.parse;
  // 劫持原生 parse 方法
  Date.parse=function(string) {
    var raw=String(string).match(/^(\d+)-(\d+)-(\d+)T(\d+):(\d+):(\d+)(?:\.(\d+))?\D?(\d*)$/);
    if(raw){
      // 从时区中拆分出时和分
      var z=raw[8].split(/(?=..$)/g);
      z[0]=z[0]|0,z[1]=z[1]|0;
      // 以 UTC 创建时间
      return new Date(Date.UTC(+raw[1],raw[2]-1,+raw[3],raw[4]-z[0],raw[5]-z[1],+raw[6],raw[7]|0));
    } else return parse.apply(this,arguments);
  };
}();
网名:
3.84.186.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^