В PHP я использую date_default_timezone_set
установить часовой пояс по умолчанию.
Тогда всякий раз, когда я использую date('m/d/y g:i A')
это дает мне правильное время для этого часового пояса независимо от местоположения клиента.
Тем не менее, я должен быть в состоянии установить определяемое пользователем смещение часового пояса по умолчанию когда страница загружается, что установлено в минутах. так что это может быть что угодно из -От 99999 до 0 до 99999.
Я не могу понять, как интегрировать смещение с настройкой часового пояса по умолчанию.
Я видел много информации о том, как использовать универсальное глобальное время а также время по Гринвичу смещения, но ничего о пользовательском смещении часового пояса по умолчанию (в минутах или секундах).
Я надеюсь, что кто-то имеет некоторый опыт в этом и может указать мне правильное направление.
По-видимому, это невозможно в PHP без определения специальной оболочки даты, выборки и назначения смещения каждый раз.
Кто-нибудь кроме меня думает, что это должно быть включено в PHP как ..
date_default_timezone_set($timezone, $optionalCustomOffset);
Я собираюсь представить RFC
Буду признателен за любую оказанную помощь.
Спасибо
Pet0
-new Date().getTimezoneOffset()/60;
getTimezoneOffset()
вычтет ваше время из GMT и вернет количество минут. Так что если вы живете в GMT-8, он вернется 480. Чтобы перевести это в часы, разделите на 60. Также обратите внимание, что знак противоположен тому, что вам нужно — это расчет смещения GMT от вашего часового пояса, а не вашего смещение часового пояса от GMT. Чтобы это исправить, просто умножьте на -1.
Что касается геолокации, я использовал MaxMind GeoIP в нескольких проектах, и он работает хорошо, хотя я не уверен, предоставляют ли они данные о часовом поясе. Это услуга, за которую вы платите, и они ежемесячно обновляют вашу базу данных. Они предоставляют обертки на нескольких веб-языках.
Что ж, после того, как я проверил это, если это сработает, я думаю, что это будет равносильно тому ответу, который я искал, поэтому мне придется пометить мой собственный ответ правильно, если никто не выйдет и не покажет меня …
(ПРИМЕЧАНИЕ: функции переименования и переопределения требуют, чтобы 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);
}