2015-11-05 4 views
0

Мне нужен пользователь, чтобы иметь возможность выбирать часовой пояс для, скажем, некоторых «трансляций». Мне нужно сохранить только значение timezone_offset выбранного часового пояса BUT в секундах. Как:Выпадающие значения часовых поясов в настройках смещения

+03: 00 должно быть сохранение в базе данных, как 10800, или если -03: 00 это должно быть, как сохранить -10800

так + offtests должны быть сохранены как только числа в секундах без знак плюс и - зачеты должны быть сохранены со знаком минус -10800

Я нашел эту функцию:

<?php 
/** 
* Timezones list with GMT offset 
* 
* @return array 
* @link http://stackoverflow.com/a/9328760 
*/ 
function tz_list() { 
    $zones_array = array(); 
    $timestamp = time(); 
    foreach(timezone_identifiers_list() as $key => $zone) { 
    date_default_timezone_set($zone); 
    $zones_array[$key]['zone'] = $zone; 
    $zones_array[$key]['diff_from_GMT'] = 'UTC/GMT ' . date('P', $timestamp); 
    } 
    return $zones_array; 
} 
?> 

Так что это:

<div style="margin-top: 20px;"> 
    <select style="font-family: 'Courier New', Courier, monospace; width: 450px;"> 
    <option value="0">Please, select timezone</option> 
    <?php foreach(tz_list() as $t) { ?> 
     <option value="<?php print $t['zone'] ?>"> 
     <?php print $t['diff_from_GMT'] . ' - ' . $t['zone'] ?> 
     </option> 
    <?php } ?> 
    </select> 
</div> 

дает мне это:

   <option value="Africa/Abidjan"> 
       UTC/GMT +00:00 - Africa/Abidjan </option> 
        <option value="Africa/Accra"> 
       UTC/GMT +00:00 - Africa/Accra </option> 
        <option value="Africa/Addis_Ababa"> 
       UTC/GMT +03:00 - Africa/Addis_Ababa </option> 
        <option value="Africa/Algiers"> 
       UTC/GMT +01:00 - Africa/Algiers </option> 

Но я должен был бы значения, чтобы быть 10800 или -10800 в зависимости от выбранного timzone.

Мое окружение - laravel 5.1 *, поэтому у меня также есть доступный углерод, возможно, это может помочь.

Так что главный вопрос в том, как преобразовать часовой пояс в формате смещение «+03: 00» до «10800» и «-03: 00» в «-10800»

ответ

0

Вы можете получить смещение часового пояса относительно по используя собственный объект PHP DateTimeZone. Здесь обновляется tz_list():

function tz_list() { 
    $zones_array = array(); 
    $timestamp = time(); 
    $dummy_datetime_object = new DateTime(); 
    foreach(timezone_identifiers_list() as $key => $zone) { 
    date_default_timezone_set($zone); 
    $zones_array[$key]['zone'] = $zone; 
    $zones_array[$key]['diff_from_GMT'] = 'UTC/GMT ' . date('P', $timestamp); 

    $tz = new DateTimeZone($zone); 
    $zones_array[$key]['offset'] = $tz->getOffset($dummy_datetime_object); 
    } 

    return $zones_array; 
} 

offset Использование в качестве значения опции ваши select «ы.