[php] 시간대가있는 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 () 객체를 만들 수 있습니다).


답변

내가 올바르게 이해했다면 먼저 다음과 같이 시간대를 설정해야합니다.

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');


답변

시간대를 지원하므로 대신 DateTime 클래스 를 사용하십시오 . 에 해당하는 DateTime은 date()입니다 DateTime::format.

DateTime의 매우 유용한 래퍼는 Carbon 입니다. 확실히 살펴보세요.

데이터베이스에 UTC로 저장하고 응용 프로그램 수준에서 변환 할 수 있습니다.


답변

대답으로 인해 몇 가지 문제가 발생했습니다. 그래서 나를 위해 일한 클리너 코드를 게시하십시오.

$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);

echo $dt->format('F j, Y @ G:i');


답변

다음과 같아야합니다.

date_default_timezone_set('America/New_York');


답변

이것은 2019에서 완벽하게 작동합니다.

date('Y-m-d H:i:s',strtotime($date. ' '.$timezone));


답변

이 시도. 유닉스 타임 스탬프 또는 날짜 시간 문자열을 전달할 수 있습니다.

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);
    }