Выпадающие значения часового пояса в настройках смещения

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

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

поэтому + смещения должны быть сохранены как просто число в секундах без знака плюс, а - смещения должны быть сохранены со знаком минус -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».


person Adnan Mujkanovic    schedule 05.11.2015    source источник


Ответы (1)


Вы можете получить смещение часового пояса, используя собственный объект 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.

person Oliver Maksimovic    schedule 05.11.2015