【问题标题】:Timezone dropdown values in offset settings偏移设置中的时区下拉值
【发布时间】:2015-11-05 14:42:07
【问题描述】:

我需要一个用户能够选择一个时区,比如说,一些“广播”。 我只需要以秒为单位保存所选时区的 timezone_offset 值。喜欢:

+03:00 应该像 10800 一样保存到数据库中,或者如果 -03:00 这应该像 -10800 一样保存

so + 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”

【问题讨论】:

    标签: php laravel-5.1 timezone-offset php-carbon


    【解决方案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 选项的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      相关资源
      最近更新 更多