2009-06-18 5 views
0

PHP에서 날짜 및 시간 마사지에 접근하는 데는 여러 가지 방법이 있습니다. 나는 대개 현지 시간 만 다룬다. 오늘 저는 UTC에서 일해야합니다. 내가 API에 대해 질의하고GMT 오프셋에 사용할 php 날짜 및 시간 도구

, 그들은 임의의 기록에 대해 말해주는 데이터는 다음과 같습니다 생성 : 2009년 (목)

'UTC 기록 작성 시간'으로 문서화 21시 44분 49초 0000 * 6월 18일을

utc_offset : -28800 * 사용자 간 차이점

데이터를 로컬 시간대에 제출 한 시간과 날짜를 사용자에게 표시하려면 간단한 문자열로 변환해야합니다.

나는 캘리포니아의 경우 위,로 변환, 믿고 예를 들면 다음과 같습니다. 6 월 목요일 18 2009 오후 2시 44분 49초

내 목표는 (내가 지금까지 전달할 수있는 시간 값을 얻을 수 있습니다) "예쁜"형식으로 쉽게 서식을 지정할 수 있습니다.

위의 생성 시간을 초에서 초로 변환하고 오프셋을 더한 다음 date()에 전달하는 것만 큼 간단합니까? 어떤 gothcha가 조심해?

$created_time = 'Thu, 18 Jun 2009 21:44:49 +0000'; 
$utc_offset = -28800; 
$seconds = strtotime($created_time); 
$localized_time = $seconds + $utc_offset; 

echo date(DATE_RFC822, $localized_time); 

감사

PHP는 자동으로 당신을 위해 일을해야

답변

2

. 대신 DateTime 객체를 사용하는 것이 좋습니다.

$dt = new DateTime($created_time); echo $dt->format(DATE_RFC2822);

PHP의 날짜 및 시간 기능은 많은 작업이 이러한 시스템을 개선 완료되었습니다 때문에, PHP의 최신 버전에있어 확인 .. 시간대 알고 있습니다.

+0

감사합니다. DateTime 객체 설명서가 꽤 깊다. 나는 검토 할 것이다. 그래도 나는 오프셋을 제대로 처리하는 방법을 알고있다. 문서에서 $ created_time에 대한 UTC 값이 무엇인지 알려드립니다. 유일한 다른 날짜/시간 값은 오프셋입니다. 사용자 데이터는 전 세계에서 온 것입니다. 오프셋은 그들이 속한 영역에 따라 달라집니다. 개체를 초 단위로 이동하고 오프셋을 더한 다음 예쁜 문자열로 변환한다고 가정합니다. –

+0

아이디어는 DateTime과 strtotime과 함께 사용됩니다. 표준 시간대를 표준 형식으로 지정하면이 표준 시간대가 선택되어 사용자 지정된 시간대로 자동 변환됩니다. 다른 방법 (두 번째 주석 달기 참조)은 기본 시간대를 임시로 변경하거나 DateTime 객체에 DateTimeZone 객체를 지정하는 것입니다. – Evert

0

date_default_timezone_set을 사용하여 시간대를 전환 할 수 있습니다. 귀하의 경우 사용자 프로필에서 시간대 정보를 전달합니다. Evert가 추천 한대로, PHP 5> = 5.2를 사용하는 경우보다 고급 DateTime 클래스를 사용하십시오.

<?php 
echo date('h:i:s')."\n"; 
date_default_timezone_set('Europe/Paris'); 
echo date('h:i:s')."\n"; 
date_Default_timezone_set('UTC'); 
echo date('h:i:s')."\n"; 
+0

감사합니다. 오프셋 만 받으면, 얻는 표준 시간대 데이터는 PHP의 "지원되는 시간대 목록"의 형식으로 포맷되지 않습니다. 나는 그 데이터를 마사지하는 것이 아니라 변화시키는 위험을 감수하고 싶습니다. 오프셋을 가져 와서 각 값 "date_default_timezone_set()"에 매핑하는 것에 대해 어떻게 생각하십니까? 아니면 아마도 내가 이미 빠뜨린 기능이 있습니까? –

+3

오프셋이있는 경우 몇 시간으로 변환하고 여기에서 시간대 중 하나를 사용하십시오 : http://us2.php.net/manual/en/timezones.others.php.귀하의 예제에서 $ utc_offset = -28800; (-28800/3600) = -8이므로 'Etc/GMT-8'이 원하는 것입니다. –