ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在JavaScript中将日期时间微格式转换为本地时间?

2019-10-09 17:41:35  阅读:188  来源: 互联网

标签:javascript timestamp timezone microformats


我有一个页面当前正在使用datetime microformat显示时间戳,但是我只是在显示自己时区的可读时间:

<abbr class="published" title="2009-01-09T09:16:00-05:00">
Friday, January 9, 2009 at 9:16 am (EST)</abbr>

我想做的是将abbr标签的innerHTML重写为相同的格式,但是要在用户的本地时区中进行.因此,对于西雅图的读者而言,以上内容应转换为:

<abbr class="published" title="2009-01-09T09:16:00-05:00">
Friday, January 9, 2009 at 6:16 am (PST)</abbr>

我查看了Javascript Date object,它使我能够获取本地时区偏移量.但是我有一些问题:

>我看不到从ISO-8601时间戳创建新的Date对象的简便方法. (如果没有更快的方法,我想可以用子字符串或正则表达式进行解析.)
>我没有办法获得时区的命名缩写.例如,对于西雅图的读者,我希望在时间末尾附加“(PST)”,否则该用户不清楚时间戳是否已转换(尤其是如果他是常客和我已经习惯了我的时代在美国东部标准时间(EST).

解决方法:

这是解析ISO时间戳的我的代码:

function isoDateStringToDate (datestr) {
  if (! this.re) {
    // The date in YYYY-MM-DD or YYYYMMDD format
    var datere = "(\\d{4})-?(\\d{2})-?(\\d{2})";
    // The time in HH:MM:SS[.uuuu] or HHMMSS[.uuuu] format
    var timere = "(\\d{2}):?(\\d{2}):?(\\d{2}(?:\\.\\d+)?)";
    // The timezone as Z or in +HH[:MM] or -HH[:MM] format
    var tzre = "(Z|(?:\\+|-)\\d{2}(?:\\:\\d{2})?)?";
    this.re = new RegExp("^" + datere + "[ T]" + timere + tzre + "$");
  }

  var matches = this.re.exec(datestr);
  if (! matches)
    return null;

  var year = matches[1];
  var month = matches[2] - 1;
  var day = matches[3];
  var hour = matches[4];
  var minute = matches[5];
  var second = Math.floor(matches[6]);
  var ms = matches[6] - second;
  var tz = matches[7];
  var ms = 0;
  var offset = 0;

  if (tz && tz != "Z") {
    var tzmatches = tz.match(/^(\+|-)(\d{2})(\:(\d{2}))$/);
    if (tzmatches) {
      offset = Number(tzmatches[2]) * 60 + Number(tzmatches[4]);
      if (tzmatches[1] == "-")
        offset = -offset;
    }
  }

  offset *= 60 * 1000;
  var dateval = Date.UTC(year, month, day, hour, minute, second, ms) - offset;

  return new Date(dateval);
}

不幸的是,它也不处理时区缩写.您将必须修改“ tzre”表达式以接受字母,而我所知的处理Javascript中时区缩写的唯一解决方案是拥有一个查找表,如果更改了区域,则手动更新该查找表夏令时.

标签:javascript,timestamp,timezone,microformats
来源: https://codeday.me/bug/20191009/1880834.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有