Мне нужен пользователь, чтобы иметь возможность выбрать часовой пояс, скажем, для некоторой «трансляции».
Мне нужно сохранить только значение 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 в зависимости от выбранной тимзоны.
Моя среда — laravel 5.1 *, поэтому у меня также есть доступный углерод, может быть, это поможет.
Поэтому основной вопрос заключается в том, как преобразовать формат смещения часового пояса «+03: 00» в «10800» и «-03: 00» в «-10800».
Вы можете получить смещение часового пояса, используя родной 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
Варианты.
Других решений пока нет …