0

たとえば、「ブロードキャスト」のタイムゾーンを選択できるユーザーが必要です。選択したタイムゾーンの 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」に変換する方法です。

4

1 に答える 1

2

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ます。

于 2015-11-05T15:10:46.313 に答える