Web 技术研究所

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

啧啧,Date 对象缺个 toLocaleISOString 方法

  在 Date 对象上有 toLocaleDateString、toLocaleTimeString 以及 toLocaleString。这些带 Locale 的方法都可以考虑当前时区以及语言风格来输出时间日期格式。但我觉得 Date 对象还缺一个 toLocaleISOString 方法,因为 toISOString 方法总是以 UTC 时区输出的。
  最近突然神奇地有个输出当前时区下 ISO8601 时间格式的需求,才发现 Date 对象自带的 toISOString 无法选择时区。于是我作死地手写了一段,在这里和大家分享下 Date.prototype.toLocaleISOString=function() {
  // 获取时区(getTimezoneOffset 的单位是分钟)
  var offset=this.getTimezoneOffset();
  var gmt=new Date(this-offset*6E4);
  var sign=['+','','-'][Math.sign(offset)+1];
  offset=Math.abs(offset);
  // 拼接带时区的 ISO 8601 字符串
  var iso=[
    gmt.getUTCFullYear(),
    gmt.getUTCMonth()+1,
    gmt.getUTCDate()
  ].join('-')+'T'+[
    gmt.getUTCHours(),
    gmt.getUTCMinutes(),
    gmt.getUTCSeconds()
  ].join(':')+(sign?sign+[offset/60|0,offset%60]:'Z');
  // 处理前零导并返回
  return iso.replace(/(?:,|(\D))(\d?)(?=\D|$)/g,'$10$2');
};
  往原生对象的原型上写添加方法确实是一种作死的行为,如果觉得恶心就写成独立函数吧。我只是把它当做一个 polyfill 所以这么写,虽然 toLocaleISOString 方法没有任何浏览器支持,也没有任何规范支持,不过我可能会去 es-discuss 提一下建议,至于会不会被加入就得看它的造化了。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^