与使用javascript Date()的Chrome,FF相比,Safari中的时区不正确

时间:2016-12-27 03:57:52

标签: javascript date datetime browser safari

使用以下代码:

var today = new Date();
console.log(String(today));

Chrome和FF返回:“2016年12月27日星期二10:55:35 GMT + 0700 (东南亚标准时间)

但是Safari返回:“2016年12月27日星期二10:55:35 GMT + 0700 (ICT)

我希望Safari返回与Chrome和FF相同的结果。我该怎么做?

这是Safari的错误吗?

2 个答案:

答案 0 :(得分:1)

  

我希望Safari返回与Chrome和FF相同的结果。我该怎么办?

您需要重新实现 Date.prototype.toString 方法。内置方法依赖于实现,因此只要符合ECMA-262(见下文)相当宽松的要求,它就符合要求。

有各种库可以合理地检测主机时区偏移并将其转换为时区名称,通常是IANA时区名称。转换为其他时区名称,例如"东南亚标准时间"更有问题,因为该时区中的每个人都可能将其称为相同名称或使用相同的缩写。

  

这是Safari的错误吗?

没有。规范只需要Date.prototype.toString返回&#34; 一个依赖于实现的String值,它使用方便的,人类可读的形式将[日期]表示为当前时区的日期和时间。< / em>&#34;,所以任何适合的都很好。

&#34;东南亚标准时间&#34;有什么区别?和&#34;印度支那时间&#34;?时区名称和缩写都没有标准,所以任何方便的,人类可读的#34;对某人来说就足够了。

答案 1 :(得分:0)

似乎Safari在标准首字母缩略词(SE Asia Standard Time vs. ITC)中存在一些时区问题,但也检测用户所在的时区。以下是我发现的一些问题:

Why is Safari confused about Date.getDay() for DST start in Sydney, Aus time zone?

Safari Time Zone issue

除此之外,您可以添加一些代码,如下所示

var today = new Date();
var x = String(today);

var ending;
for (var i = 0; i < x.length; i++) {
  if (x[i] == "(") {
    ending = i;
  }
}
x = x.slice(0, ending);
x += "(SE Asia Standard Time)";

console.log(x);

我认为这样可以让你至少正确地格式化它。