Internet Explorer 11计算的时区错误



我知道问题的来源,大约半天被谷歌搜索,但仍然找不到任何好的解决方法或解决方案。

我们的Angular 7 应用程序使用时区拦截器,看起来像这样:

import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Injectable } from '@angular/core';
@Injectable()
export class TimezoneInterceptor implements HttpInterceptor {
  constructor() {
  }
  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
    if (timezone) {
      req = req.clone({
        setHeaders: {
          Timezone: timezone
        }
      });
    } else {
      console.error('Unknown Timezone!');
    }
    return next.handle(req);
  }
}

Internet Explorer 11不支持 resolvedOptions().timeZone;,我不知道我可以使用什么来使其在所有浏览器中工作。

每个帮助都将受到赞赏!

的确,IE 11不支持这。请参阅" dateTimeFormat"下的INTL兼容性图表,然后在" resolvedoptions((。时区默认为主机环境"。

如果您必须支持IE 11,则需要诉诸猜测用户时区的较旧方法。长期以来,JstimeZonedEtect是唯一的可靠方法。但是,它没有得到维护,所以这些天我不建议这样做。

后来,MOMMENZONE添加了moment.tz.guess()功能。由于这仍然在一定程度上维护,这可能是您唯一的选择。

两个库将在可用时使用Intl API,但后来又回到了算法,该算法在某些键DST过渡日期处询问Date对象的各种偏移量。这就是为什么它是"猜测"的原因。它通常非常准确或至少关闭,但不能总是在某些边缘情况下确定用户计算机的确切设置。

另一个缺点是这些库必须将时区数据运送到浏览器,这附带了该数据大小的开销。通过使用一个截短的数据文件,例如moment-timezone-with-data-10-year-range.min.js

如果您不必支持11及以上的浏览器,那么您可以直接使用Intl API,如您在问题中所示。

相关内容

  • 没有找到相关文章

最新更新