Добавление часовых поясов на основе штата и страны в таблицу MYSQL

#php #mysql #timezone

#php #mysql #Часовой пояс

Вопрос:

У меня есть таблица mysql с такими данными, как (имя, адрес, пол, город, почтовый индекс, страна, часовой пояс) Когда пользователь заполняет форму для добавления этих данных, я хотел бы, чтобы соответствующий часовой пояс был добавлен на основе штата и страны, как я могу это сделать?

Спасибо,

Комментарии:

1. Как насчет состояний с более чем 1 часовым поясом?

Ответ №1:

Почему бы не иметь следующее поле выбора в вашей форме?

  $list = DateTimeZone::listAbbreviations();

    $idents = DateTimeZone::listIdentifiers();

    $data = $offset = $added = array();
    foreach ($list as $abbr => $info) {
        foreach ($info as $zone) {
            if ( ! empty($zone['timezone_id'])
                AND
                ! in_array($zone['timezone_id'], $added)
                AND 
                  in_array($zone['timezone_id'], $idents)) {
                $z = new DateTimeZone($zone['timezone_id']);
                $c = new DateTime(null, $z);
                $zone['time'] = $c->format('H:i a');
                $data[] = $zone;
                $offset[] = $z->getOffset($c);
                $added[] = $zone['timezone_id'];
            }
        }
    }

    array_multisort($added, SORT_ASC, $data);
    $options = array();
    foreach ($data as $key => $row) {
        $options[$row['timezone_id']] = $row['time'] . ' - '
                                        . formatOffset($row['offset']) 
                                        . ' ' . $row['timezone_id'];
        $values[$row['timezone_id']] = $row['time'] . '/'
                                        . formatOffset($row['offset']) 
                                        . '/' . $row['timezone_id'];
    }


function formatOffset($offset) {
        $hours = $offset / 3600;
        $remainder = $offset % 3600;
        $sign = $hours > 0 ? ' ' : '-';
        $hour = (int) abs($hours);
        $minutes = (int) abs($remainder / 60);

        if ($hour == 0 AND $minutes == 0) {
            $sign = ' ';
        }
        return 'GMT' . $sign . str_pad($hour, 2, '0', STR_PAD_LEFT) 
                .':'. str_pad($minutes,2, '0');

}

echo "<select name='locale'>";
foreach($options as $key=>$value){
    echo "<option value='".$values[$key]."'>".$value."</option>";
}
echo "</select>";
  

Это позволило бы учесть тот факт, что существуют состояния с несколькими часовыми поясами. Когда вы затем получите результат отправки этой формы, вы можете разбить значение поля на ‘/’, где $_POST['locale'] находится обработчик для выбранной опции выбора, затем вы можете извлечь часовой пояс, страну и штат из одного поля.

 $locale=explode("/",$_POST['locale']);
// $locale[0] = timezone
// $locale[1] = country
// $locale[2-n] = state(s)