2010-05-14 7 views
2

현재 데이터베이스에 'time()'함수를 사용하여 시간을 저장하고 있습니다. 그러나 서버의 시간대를 사용하고 있으며 각 사용자가 자신의 시간대 (프로필에 설정된 시간)에 따라 시간을 확인하고 싶습니다.PHP : 서버 타임 스탬프를 사용자의 시간대로 어떻게 변환합니까?

어떻게 타임 스탬프 변환을 수행합니까? (그리고 타임 스탬프에서 타임 스탬프까지 읽을 수있는 시간이 아님)

답변

9

투입 Joonas 말했듯이, UNIX 타임 스탬프는 정의 UTC으로,하지만 당신이 정말로 필요한 경우는 다음과 같이 함께 시간대 별 타임 스탬프를 모방하기 위해 해킹 수 :

// PHP 5.3 - OO Code 
$timestamp = time(); 
echo 'Unix timestamp: ' . $timestamp; 
$dt = DateTime::createFromFormat('U', $timestamp); 
$dt->setTimeZone(new DateTimeZone('America/New_York')); 
$adjusted_timestamp = $dt->format('U') + $dt->getOffset(); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 

// PHP 5.3 - Procedural Code 
$timestamp = time(); 
echo 'Unix timestamp: ' . $timestamp; 
$dt = date_create_from_format('U', $timestamp); 
date_timezone_set($dt, new DateTimeZone('America/New_York')); 
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 
+0

고마워,하지만이 '정의되지 않은 메서드 DateTime :: createfromformat() 호출'오류가 발생합니다. 어떻게 그것이 정의되지 않았다고 말하는거야? – KeyStroke

+0

어떤 PHP 버전을 사용하고 있습니까? – Mike

+3

이 코드는 아마 PHP 5.3이 필요합니다. –

1

UNIX 타임 스탬프는 정의에 따라 UTC로 정의됩니다. 즉, 모든 변환은 실제 타임 스탬프가 아닌 인쇄하기 전에 수행되어야합니다.

그러나이를 수행하는 방법은 현재 서식을 지정하는 방법에 따라 다릅니다. 나는 PHP가 내장 된 시간대 처리 기능을 가지고 있다고 믿는다.

+0

에 발견 다른 시간대. 데이터베이스의 타임 스탬프에 대해 많은 작업을 수행하므로 시간을 출력하는 모든 인스턴스에서 시간대를 반복해서 지정하는 것은 과로 한 작업입니다. – KeyStroke

2

정말 당신이 타임 스탬프를 해킹하지 않아야 그들 자신이 날짜를 변경하려면, 포맷 된 날짜 스탬프를 사용자에게 제시하기 전에 타임 스탬프에 시간대를 적용해야합니다.

이것은 PHP 5에 대한 작업을해야 마이크의 코드의 수정 된 버전> = 5.2.0 내가 몇 가지 기능을 찾았지만, 그들 중 누구도 A를 타임 스탬프 자체를 변환하지 php.net

// OO Code 
$st = 1170288000 // a timestamp 
$dt = new DateTime("@$st"); 
$dt->setTimeZone(new DateTimeZone('America/New_York')); 
$adjusted_timestamp = $dt->format('U') + $dt->getOffset(); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 

// Procedural Code 
$st = 1170288000 // a timestamp 
$dt = date_create("@$st"); 
date_timezone_set($dt, timezone_open('America/New_York')); 
$adjusted_timestamp = date_format($dt, 'U') + date_offset_get($dt); 
echo ' Timestamp adjusted for America/New_York: ' . $adjusted_timestamp; 
관련 문제