2016-12-27 5 views
2

С помощью следующего кода:Некорректное часовой пояс в Safari, по сравнению с Chrome, FF, Использование JavaScript Date()

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

Chrome и FF возвращения: «Вс дек 27, 2016 10:55 : 35 GMT + 0700 (SE Asia Standard Time) "

НО, Safari возвращается: "Вс дек 27 2016 10:55:35 GMT + 0700 (ИКТ)"

Я хочу, чтобы Safari возвращала тот же результат, что и Chrome и FF. Как мне это сделать?

Это ошибка Safari?

+0

Выход из [* Date.prototype.toString *] (http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring) полностью зависит от реализации, там вы ничего не можете сделать, чтобы изменить формат, строку часового пояса или любой ее аспект.Просто потому, что один хозяин несовместим с другими, это не делает его неправильным, просто другим. Существуют различные библиотеки, которые выполняют разумную задачу определения часового пояса пользователя. Они не на 100% точны, поэтому, если это имеет значение, не полагайтесь на него. – RobG

ответ

0

Похоже, что Safari имеет некоторые проблемы с часовым поясом не только со стандартными аббревиатурами (SE Asia Standard Time и 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); 

Я думаю, что это позволит вам по крайней мере, формат это правильно.

+1

ИКТ - это всего лишь один случай во многих случаях Safari. Давайте посмотрим на https://golang.org/src/time/zoneinfo_abbrs_windows.go?m=text. Я думаю, мы должны создать функцию для преобразования DST в часовой пояс ... –

+0

Но проблема, с которой вы столкнулись, - это последняя часть между круглыми скобками, правильно? Я не понимаю, почему DST будет проблемой, когда отображение двух часов в Chrome/FF и Safari численно одинаково. – sebasaenz

+0

Да, проблема в том, что идентификатор TimeZone (между круглыми скобками) не совпадает с моим ожидаемым при использовании Safari. В настоящее время я вижу, что Safari, работающий на моем Mac, возвращает идентификатор временной зоны DST, а не идентификатор часового пояса STD, как FF/Chrome, работающий на моем ПК с ОС Windows. Итак, я думаю, что это происходит из часовой пояс STD и DST .... hmm –

1

Я хочу, чтобы Safari возвращала тот же результат, что и Chrome и FF. Как мне это сделать?

Вам нужно будет переопределить Date.prototype.toString метод. Встроенный метод зависит от реализации, поэтому, если он соответствует достаточному требованию ECMA-262 (см. Ниже), он является совместимым.

Существуют различные библиотеки, которые выполняют разумную задачу по обнаружению смещения часового пояса хоста и преобразованию его в имя часового пояса, как правило, имя часового пояса IANA. Преобразование в другие названия часовых поясов, таких как «SE Asia Standard Time», более проблематично, так как вряд ли не все в этот часовой пояс называют его одним и тем же именем или используют ту же аббревиатуру.

Это ошибка Safari?

Нет. Спецификация просто требует, что Date.prototype.toString возвращает «зависящих от реализации строкового значения, которое представляет собой [дату] в качестве даты и времени в текущем часовом поясе, используя удобную, читаемую форму.» , поэтому все, что подходит, прекрасно.

В чем разница между «SE Asia Standard Time» и «Indochina Time»? Стандартов для названий часовых поясов и их сокращений нет, поэтому достаточно «удобного, удобного для человека» для кого-то достаточно.

+0

Вы правы. Это отличается от FF/Chrome и Safari. Поэтому я думаю, что могу использовать значение смещения для определения имени часового пояса. Оба FF/Chrome и Safari возвращают одинаковое значение смещения. –

+0

@ PhucNguyen - значение смещения основано на настройках хоста. Нет стандарта для имен часового пояса, и могут быть несколько часовых поясов с разными именами, которые имеют одинаковое смещение. – RobG