Ответ 1
См. этот вопрос. Это не выполнимо в общем случае, но для выбора часового пояса по умолчанию из краткого списка вероятных случаев вы можете сделать достойное предположение.
Разрешить пользователю переопределять его, если вы ошибаетесь.
Мне нужно определить часовой пояс клиента (например, CET, GMT, EST) в JS. Получение смещения является простым, но не содержит всей информации, необходимой для определения TZ, по крайней мере, нелегко. У меня есть ощущение, что можно использовать комбинацию смещения, независимо от того, используется ли DST и по сути, и т.д., Но я надеюсь, что кто-то еще проделает эту работу уже, особенно учитывая странные исключения при работе со временем.
Итак, с этим я в настоящее время застрял.
См. этот вопрос. Это не выполнимо в общем случае, но для выбора часового пояса по умолчанию из краткого списка вероятных случаев вы можете сделать достойное предположение.
Разрешить пользователю переопределять его, если вы ошибаетесь.
Вы можете очистить его от метода даты toString()
. new Date.toString()
приводит к чему-то вроде Wed Sep 19 2012 10:04:32 GMT-0400 (Eastern Daylight Time)
в Firefox, Safari и Chrome. Необходимые данные - это заглавные буквы в круглых скобках. Все, что нужно, это очистить их.
В случае Internet Explorer результат toString()
уже включает EDT
.
В случае Opera ваш единственный вариант - установить для GMT-0400
или аналогичный. В методе toString()
нет ничего невозможного.
var now = new Date().toString();
var TZ = now.indexOf('(') > -1 ?
now.match(/\([^\)]+\)/)[0].match(/[A-Z]/g).join('') :
now.match(/[A-Z]{3,4}/)[0];
if (TZ == "GMT" && /(GMT\W*\d{4})/.test(now)) TZ = RegExp.$1;
Примеры результатов:
Firefox: TZ = "EDT"
Safari: TZ = "EDT"
Chrome: TZ = "EDT"
IE: TZ = "EDT"
Opera: TZ = "GMT-0400"
Кажется, что он работает так же хорошо со всеми случайными азиатскими и европейскими часовыми поясами, которые я также пытался, возвращая WPST для Гуама (стандартное время в западной части Тихого океана), MPST для Куала-Лумпура (стандартное время Малайского полуострова) и т.д.; и мирно унизится до обозначения GMT + 0X00, где браузер не дает имя (например, Перт).
Что бы я делал, это определение стандартного и дневного смещения (похоже, вы уже знали. Если нет, вы можете начать с этой ссылки http://onlineaspect.com/examples/timezone/detect_timezone.js Джошем Фрейзером). Определение часового пояса всегда может выполняться на стороне сервера, когда известны стандартные и дневные смещения. Затем можно использовать вызов Ajax, чтобы обновление страницы не требовалось. Конечный результат: теперь у вас есть часовой пояс со стороны JavaScript.
Начиная с этот ответ на другой вопрос, я обнаружил, что IP API также дает вам часовой пояс - довольно удобно:
$.ajax({
url: "http://ip-api.com/json",
type: 'GET',
success: function(json) {
console.log("Timezone: " + json.timezone);
},
error: function(err) {
console.log("Request failed, error= " + err);
}
});
Если вам просто нужно смещение, то это намного проще
var curdate = new Date();
var offset = curdate.getTimezoneOffset();