그래서 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