使用以下代码:
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的错误吗?
答案 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?
除此之外,您可以添加一些代码,如下所示
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);
我认为这样可以让你至少正确地格式化它。