Часовой пояс PHP по умолчанию (или дата) с пользовательским смещением Использование даты ()
В PHP я использую date_default_timezone_set
установить часовой пояс по умолчанию.
Тогда всякий раз, когда я использую date('m/d/y g:i A')
это дает мне правильное время для этого часового пояса независимо от местоположения клиента.
Тем не менее, мне нужно иметь возможность установить смещение часового пояса, заданное пользователем по умолчанию, когда страница загружается в минутах. так что это может быть что-то от -99999 до 0 до 99999.
Я не могу понять, как интегрировать смещение с настройкой часового пояса по умолчанию.
Я видел много информации о том, как использовать смещения UTC и GMT, но ничего о смещении часового пояса по умолчанию (в минутах или секундах).
Я надеюсь, что кто-то имеет некоторый опыт в этом и может указать мне правильное направление.
По-видимому, это невозможно в PHP без определения специальной оболочки даты, выборки и назначения смещения каждый раз.
Кто-нибудь еще, кроме меня, думает, что это должно быть включено в PHP, как...
date_default_timezone_set($timezone, $optionalCustomOffset);
Я собираюсь представить RFC
Буду признателен за любую оказанную помощь.
Спасибо
Pet0
2 ответа
ОБНОВИТЬ
Что ж, после того, как я проверил это, если это сработает, я думаю, что это будет равносильно тому ответу, который я искал, поэтому мне придется пометить мой собственный ответ правильно, если кто-нибудь не выйдет и не покажет меня....
(ПРИМЕЧАНИЕ. Функции переименования и переопределения требуют установки PECL APD.)
if (function_exist('__overridden__'))
{ rename_function('__overridden__', 'dummy-override'); }
rename_function('date', 'date-native');
override_function('date', '$s ="l, F jS, Y, g:i:s A", $t = null', 'return izDate($s ="l, F jS, Y, g:i:s A", $t = null);');
rename_function("__overridden__", 'date-override');
function izDate($s = 'l, F jS, Y, g:i:s A', $t = null) {
$file = ('../timezone.config');
$f = file_get_contents($file);
$offset = getTzValue($f, 'offset');
$time = $t === null ? time() : $t;
$time += $offset ? (int) $offset : 0;
return date-native($s, $time);
}
КОНЕЦ ОБНОВЛЕНИЯ
У меня не было много времени, чтобы ждать ответа на этот вопрос, поэтому я решил это. Если кто-нибудь найдет лучшее решение или даже сможет помочь мне написать лучшую обертку для этого, я поставлю галочку.
function izDate($s, $t=null) {
$file = ('../timezone.config');
$f = file_get_contents($file);
$offset = getTzValue($f, 'offset');
$time = $t===null ? time() : $t;
$time += $offset ? (int) $offset : 0;
return date($s, $time);
}
-new Date().getTimezoneOffset()/60;
getTimezoneOffset()
вычтет ваше время из GMT и вернет количество минут. Так что если вы живете в GMT-8, он вернется 480. Чтобы перевести это в часы, разделите на 60. Также обратите внимание, что знак противоположен тому, что вам нужно - это вычисление смещения GMT от вашего часового пояса, а не вашего смещение часового пояса от GMT. Чтобы это исправить, просто умножьте на -1.
Что касается геолокации, я использовал MaxMind GeoIP в нескольких проектах, и он работает хорошо, хотя я не уверен, предоставляют ли они данные о часовых поясах. Это услуга, за которую вы платите, и они ежемесячно обновляют вашу базу данных. Они предоставляют обертки на нескольких веб-языках.