2012-11-30 2 views
2

다른 국가를 대상으로 웹 응용 프로그램을 개발하는 중입니다. 이 같은서버 시간과 사용자 로컬 시간의 차이를 처리하는 방법은 무엇입니까?

이제

, 내 생각을 설명하기 위해, 내가 생각 뭔가 :

// Illustrates the current time on my server 
$time = new DateTime(); 
echo $time->format("Y-m-d H:i:s P"); 

// Illustrates the current time for the time the user told my app he is in 
$time = new DateTime(null, new DateTimeZone('Europe/London')); 
echo $time->format("Y-m-d H:i:s P"); 

이의 출력은 : 지금 현재를 제시 할 수 있기 때문에

2012-11-30 11:02:40 +01:00 // My server time 
2012-11-30 10:02:40 +00:00 // The users time 

그것은 모든 아주 괜찮아요 사용자에 대한 시간. 하지만 필요한 것은 사용자 입력을 받아 내 서버 시간으로 변환하는 것입니다. 적어도이 방법을 사용하는 것이 옳다고 생각합니다.

유스 케이스는 런던에서
사용자는 그가 2012-12-01 19:00:00에서 수행하는 작업을 필요로 내 응용 프로그램을 알려줍니다. 내 데이터베이스에서이 타임 스탬프를 업데이트하면 내 cronjob이 지정된 시간에이 작업을 수행합니다. 하지만 내 사용자는 2012-12-01 18:00:00에서이 문제를 경험하게 될 것입니다.

이 문제를 해결할 방법을 생각하면서 몇 시간의 오프셋 작업을하고 있었는데이 작업은 나에게 많은 스파게티 코드를 주었고 일부 데이터베이스는 엉망으로 만들었습니다.

어떻게 이해하면 되겠습니까?

답변

2

DateTime 개체의 시간대를 필수로 변경할 수 있습니다. 시간대에서 사용자가 지정한 날짜 시간이 있으면 쉽게 변환 할 수 있습니다.

$time = new DateTime(null, new DateTimeZone('Europe/London')); 
echo $time->format("Y-m-d H:i:s P"); 

$time->setTimezone(new DateTimeZone('America/Chicago')); 
echo $time->format("Y-m-d H:i:s P"); 
+0

굉장 - 간단하고 효율적입니다. 고맙습니다. – Repox

관련 문제