Timezone 콤포넌트를 만들어보자

안녕하세요. 주선입니다.

Timezone을 취급할 일이 있어서 콤포넌트를 알아보니 적용하기에 참 -_- 난감한 점이 많아서 간략히 원리만 납겨둘려고합니다.

수많은 Timezone을 정리할까? 하다가 PHP문서를 보고 알게 된 것이 있습니다. 다 있더군요.. datetimezone 객체에요…

자세한 내용은 메뉴얼을 참고해주세요.

https://www.php.net/manual/en/class.datetimezone.php

그래서 이걸 기반으로 Timezone 리스트를 불러옵니다.

$region = $_POST['region'];

$TZ_REGIONS = (object)array(
  "Africa" => DateTimeZone::AFRICA,
  "America" => DateTimeZone::AMERICA,
  "Antarctica" => DateTimeZone::ANTARCTICA,
  "Asia" => DateTimeZone::ASIA,
  "Atlantic" => DateTimeZone::ATLANTIC,
  "Australia" => DateTimeZone::AUSTRALIA,
  "Europe" => DateTimeZone::EUROPE,
  "Indian" => DateTimeZone::INDIAN,
  "Pacific" => DateTimeZone::PACIFIC
);

$search_region = $TZ_REGIONS->$region;

if($search_region == ""){
	$search_region = DateTimeZone::ALL;
}

$timeZones = DateTimeZone::listIdentifiers($search_region);

$ret = array();
foreach ( $timeZones as $key => $zoneName){
	$tz = new DateTimeZone($zoneName);
    $loc = $tz->getLocation();
    $row = array();
    $row['zone'] = $zoneName;
    $row['country_code'] = $loc['country_code'];
    $ret[] = $row;
}
echo json_encode($ret);

프레임웍에 쓰고 있는 코드와 좀 다르게 인라인 스타일로 고쳐봤습니다. DateTimeZone이 안불러와지면 \DateTimeZone 으로 불러올수 있습니다.

원할한 TimeZone 선택을 위해서 지역별로 타임존을 불러 올수있도록 지정할 수있게 했습니다. 물론 지역을 지정하지 않으면 모든 지역을 리스팅 할 수 있어요. country_code도 있길래 넣어놨습니다. getLocation을 들여다보면 지도좌표도 포함되어있습니다. 참고하세욥…

이 데이터를 기반으로 다음과 같은 폼으로 만들 수 있습니다.

자바스크립트와 폼은 알아서 -_-/”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.