Часовой пояс и летнее время CodeIgniter

Я ищу лучшее решение для просмотра местного времени для всех пользователей моего сайта.

У меня проблема с летним временем, на самом деле, я получил эту функцию, если у вас есть лучший способ помочь мне:

function timezone_by_offset($offset) {


$abbrarray = timezone_abbreviations_list();
$offset = $offset * 60 * 60;

foreach ($abbrarray as $abbr) {
foreach ($abbr as $city) {
if ($city['offset'] == $offset && $city['dst'] == TRUE) {
return $city['timezone_id'];
}
}
}
return 'UTC'; // any default value you wish
}
echo timezone_by_offset(1) . '<br/>';
echo (date_default_timezone_set(timezone_by_offset(1)) == TRUE ? 'Valid'. date('Y-m-d H:i:s') : 'Not Valid'). '<br/>';

РЕШЕНИЕ :

<?php
function get_timezones()
{
$o = array();
$t_zones = timezone_identifiers_list();
foreach($t_zones as $a)
{
$t = '';

try
{
//this throws exception for 'US/Pacific-New'
$zone = new DateTimeZone($a);

$seconds = $zone->getOffset( new DateTime("now" , $zone) );
$hours = sprintf( "%+02d" , intval($seconds/3600));
$minutes = sprintf( "%02d" , ($seconds%3600)/60 );

$t = $a ."  [ $hours:$minutes ]" ;

$o[$a] = $t;
}

//exceptions must be catched, else a blank page
catch(Exception $e)
{
//die("Exception : " . $e->getMessage() . '<br />');
//what to do in catch ? , nothing just relax
}
}

ksort($o);

return $o;
}

$o = get_timezones();
?>

<html>
<body>
<select name="time_zone">
<?php
foreach($o as $tz => $label)
{
echo "<option value="$tz">$label</option>";
}
?>
</select>
</body>
</html>

С уважением.

-1

Решение

ОБНОВЛЕНИЕ 3
ЧАСТЬ 1 — Поиск правильного часового пояса
Если вы ищете timezone_name с помощью его смещения и при наличии перехода на летнее время, вы устанавливаете третий параметр timezone_name_from_abbr () в true, в противном случае — в false. Если вы установите его равным 1, а смещение + летнее время не даст правильное имя timezone_name, оно вернет false. В таких случаях вы можете включить его обратно в false.
пример

$tz = timezone_name_from_abbr(null, $offset * 3600, true);
if($tz === false) $tz = timezone_name_from_abbr(null, $offset * 3600, false);

ЧАСТЬ 2 — Получить местную дату / время в соответствии с DAYLIGHT SAVINGS
Здесь вам не нужно ничего делать, после установки часового пояса функция PHP date автоматически устанавливает переход на летнее время в соответствии с вашим часовым поясом и текущей датой. Так

function print_according_to_offset($offset)
{

$tz = timezone_name_from_abbr(null, $offset, true); //If a ofset with daylight savings is found
if($tz === false) $tz = timezone_name_from_abbr(null, $offset, false); //otherwise
if($tz === false) // If no timezone is still found
{
echo 'Invalid Offset <br />';
return;
}
$otherTZ  = new DateTimeZone($tz);
$datetime = new DateTime; // current time = server time
$datetime->setTimezone($otherTZ);
echo $tz . '<br />';
echo $datetime->format('Y-m-d H:i:s') .'<br /><br />';
}

print_according_to_offset(19800);

ОБНОВЛЕНИЕ 2

<?php
$timezone = '+0:00';
$timezone = preg_replace('/[^0-9]/', '', $timezone) * 36;
$timezone_name = timezone_name_from_abbr(null, $timezone, true);
date_default_timezone_set($timezone_name);
echo date('D d M Y H:i:s');
?>

Дополнительная информация

ОБНОВИТЬ
Функция CI и улучшенный код

function print_according_to_offset($offset)
{
$user_timezone =  timezone_name_from_abbr("",$offset,0);
$otherTZ  = new DateTimeZone($user_timezone);
$datetime = new DateTime; // current time = server time
$datetime->setTimezone($otherTZ);
echo $datetime->format('Y-m-d H:i:s') .'<br />';
}

print_according_to_offset(14400); //EXAMPLE

Не ожидайте, что мы сделаем все за вас, отредактируйте функцию и верните $ otherTZ, если вам нужно получить только часовой пояс.
Старый пост
Я думаю, что это то, что вам нужно.

$offset = 3600 ; //your offset
$my_timezone =  timezone_name_from_abbr("",$offset,0);

date_default_timezone_set($my_timezone);
echo date('Y-m-d H:i:s');

Больше информации

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector