그래서 PHP에서 지원되는 시간대 목록을 확인했는데 어떻게 date()
함수에 포함시킬 수 있는지 궁금합니다 . 감사!
나는 기본 시간대를 원하지 않으며 각 사용자는 자신의 시간대를 데이터베이스에 저장하고 사용자의 시간대를 사용하여 사용합니다. 어떻게? 나는 그것을 사용하는 방법이 아니라 데이터베이스에서 가져 오는 방법을 알고 있습니다.
그래서 PHP에서 지원되는 시간대 목록을 확인했는데 어떻게 date()
함수에 포함시킬 수 있는지 궁금합니다 . 감사!
나는 기본 시간대를 원하지 않으며 각 사용자는 자신의 시간대를 데이터베이스에 저장하고 사용자의 시간대를 사용하여 사용합니다. 어떻게? 나는 그것을 사용하는 방법이 아니라 데이터베이스에서 가져 오는 방법을 알고 있습니다.
답변:
이러한 작업의 경우 실제로 PHP의 DateTime 클래스를 사용해야합니다. date () 또는 date_set_time_zone을 사용하도록 조언하는 모든 답변을 무시하십시오. 단순히 나쁘고 구식입니다.
시연을 위해 의사 코드를 사용할 것이므로 필요에 맞게 코드를 조정하십시오.
변수 $ tz에 유효한 시간대의 문자열 이름이 있고 변수 $ timestamp에 시간대에 따라 형식을 지정할 타임 스탬프가 포함되어 있다고 가정하면 코드는 다음과 같습니다.
$tz = 'Europe/London';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
echo $dt->format('d.m.Y, H:i:s');
DateTime 클래스는 강력하고 모든 기능을 이해하려면 php.net에서 이에 대해 읽는 데 시간을 투자해야합니다. 질문에 완전히 답하려면 시간대 매개 변수를 동적으로 조정할 수 있습니다 (db에서 읽는 동안 각 반복에서 새 DateTimeZone () 객체를 만들 수 있습니다).
DateTime
객체 에서 타임 스탬프가 어떻게 변경 될 수 있는지 사람들이 볼 수 있도록 거기에 넣었습니다 .
내가 올바르게 이해했다면 먼저 다음과 같이 시간대를 설정해야합니다.
date_default_timezone_set('UTC');
그리고 날짜 기능을 사용할 수 있습니다.
// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');
TIMESTAMP
데이터 유형으로 저장하십시오 . 백엔드에서 UTC로 저장하므로 선택한 시간대로 변환 할 수 있습니다.
시간대를 지원하므로 대신 DateTime 클래스 를 사용하십시오 . 에 해당하는 DateTime은 date()
입니다 DateTime::format
.
DateTime의 매우 유용한 래퍼는 Carbon 입니다. 확실히 살펴보세요.
데이터베이스에 UTC로 저장하고 응용 프로그램 수준에서 변환 할 수 있습니다.
setTimezone()
해당 클래스 의 기능을 사용하여 애플리케이션 로직에서이를 처리합니다 .
다음과 같아야합니다.
date_default_timezone_set('America/New_York');
이 시도. 유닉스 타임 스탬프 또는 날짜 시간 문자열을 전달할 수 있습니다.
public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Y-m-d H:i:s')
{
$datetime = is_numeric($timestamp) ?
DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) :
new DateTime($timestamp, new DateTimeZone($fromTimezone));
$datetime->setTimezone(new DateTimeZone($toTimezone));
return $datetime->format($format);
}
이 매우 간단한 기능을 만들었으며 매력처럼 작동합니다.
function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */
$date = new DateTime(date("d F Y H:i:s",$timestamp));
$date->setTimezone(new DateTimeZone($timezone));
$rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */
return $rt;
}
위에 언급되지 않았습니다. 생성자에 @ 기호가 붙은 문자열로 타임 스탬프를 제공하여 DateTime 객체를 생성 할 수도 있습니다.
$dt = new DateTime('@123456789');
$dt->setTimezone(new DateTimeZone('America/New_York'));
echo $dt->format('F j, Y - G:i');
복합 형식에 대한 설명서를 참조하십시오 : https://www.php.net/manual/en/datetime.formats.compound.php