Часовой пояс PHP по умолчанию (или дата) с пользовательским смещением Использование даты ()

В 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

1

Решение

-new Date().getTimezoneOffset()/60;

getTimezoneOffset() вычтет ваше время из GMT и вернет количество минут. Так что если вы живете в GMT-8, он вернется 480. Чтобы перевести это в часы, разделите на 60. Также обратите внимание, что знак противоположен тому, что вам нужно — это расчет смещения GMT от вашего часового пояса, а не вашего смещение часового пояса от GMT. Чтобы это исправить, просто умножьте на -1.

Что касается геолокации, я использовал MaxMind GeoIP в нескольких проектах, и он работает хорошо, хотя я не уверен, предоставляют ли они данные о часовом поясе. Это услуга, за которую вы платите, и они ежемесячно обновляют вашу базу данных. Они предоставляют обертки на нескольких веб-языках.

0

Другие решения

ОБНОВИТЬ

Что ж, после того, как я проверил это, если это сработает, я думаю, что это будет равносильно тому ответу, который я искал, поэтому мне придется пометить мой собственный ответ правильно, если никто не выйдет и не покажет меня …

(ПРИМЕЧАНИЕ: функции переименования и переопределения требуют, чтобы 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);
}
0

По вопросам рекламы [email protected]