표준 시간대가 있는 PHP 날짜()?
그래서 저는 PHP에서 지원되는 표준 시간대 목록을 확인했고, 어떻게 하면 이러한 표준 시간대를 포함할 수 있을까?date()
능하하??? ???★★★★★★★★★★★★★★★★★★!
디폴트 타임존을 원하지 않습니다.각 사용자의 타임존이 데이터베이스에 저장되어 있습니다.사용자의 타임존을 가져와 사용합니다.어떻게요?데이터베이스에서 가져오는 방법은 알지만, 어떻게 사용하는지는 몰라요.
이러한 작업에는 PHP의 Date Time 클래스를 사용해야 합니다.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');
Date Time 클래스는 매우 강력하며, 그 모든 기능을 파악하려면 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');
대신 Date Time 클래스가 시간대를 지원하므로 사용합니다.해당하는 날짜 시간:date()
는 입니다.
Date Time에 매우 도움이 되는 포장지는 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');
Unix 타임스탬프에 시간대 차이를 추가할 수 있습니다.모스크바의 예(UTC+3)
echo date('d.m.Y H:i:s', time() + 3 * 60 * 60);
2019년에는 완벽하게 동작합니다.
date('Y-m-d H:i:s',strtotime($date. ' '.$timezone));
이거 먹어봐.unix 타임스탬프 또는 datetime 문자열 중 하나를 전달할 수 있습니다.
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;
}
Date Time 클래스를 기반으로 답변을 시도했습니다.작업 중에 DateTime 객체의 타임존을 작성 시 인식할 수 있는 훨씬 간단한 솔루션을 발견했습니다.
$dt = new DateTime("now", new DateTimeZone('Asia/Jakarta'));
echo $dt->format("Y-m-d H:i:s");
인도네시아 자카르타의 현재 현지 시간이 반환됩니다.
상기에 기재되어 있지 않다.또한 생성자에 선두의 @ 기호를 사용하여 타임스탬프를 문자열로 제공하여 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
Team EJ의 답변을 사용하는 경우 DateTime 형식 문자열에 T를 사용하면 3글자의 약어가 표시되지만 다음과 같이 타임존의 긴 이름을 얻을 수 있습니다.
$date = new DateTime('2/3/2022 02:11:17');
$date->setTimezone(new DateTimeZone('America/Chicago'));
echo "\n" . $date->format('Y-m-d h:i:s T');
/* Displays 2022-02-03 02:11:17 CST "; */
$t = $date->getTimezone();
echo "\nTimezone: " . $t->getName();
/* Displays Timezone: America/Chicago */
$now = new DateTime();
$now->format('d-m-Y H:i:s T')
유언 출력:
29-12-2021 12:38:15 UTC
다른 답변을 바탕으로 원라이너를 작성했는데, 현재 날짜 시간이 필요할 것 같습니다.다른 타임스탬프가 필요한 경우 쉽게 조정할 수 있습니다.
$dt = (new DateTime("now", new DateTimeZone('Europe/Rome')))->format('d-m-Y_His');
진행하다가 이상한 문제가 생겼어요.아래 코드로 확인해보니 타임존이 올바르게 설정되어 있었습니다.
echo ini_get('date.timezone');
하지만 돌아온 시각은 UTC였습니다.
PHP 설정에서 타임존이 올바르게 설정되어 있기 때문에 솔루션에서는 다음 코드를 사용하고 있었습니다.
date_default_timezone_set(ini_get('date.timezone'));
date_default_timezone_set 함수 date_default_timezone_set(SOME_PHP_VARILE)에서 데이터베이스 값을 대체할 수 있지만 시간대와 관련된 정확한 값만 관리하면 됩니다.
언급URL : https://stackoverflow.com/questions/20288789/php-date-with-timezone
'programing' 카테고리의 다른 글
mysqld.sock을 찾을 수 없음: 소켓 '/var/run/mysqld/mysqld'를 통해 로컬 MySQL 서버에 연결할 수 없습니다.sock' (2 "그런 파일 또는 디렉토리가 없습니다") (0) | 2022.10.30 |
---|---|
도커 이미지 내에서 MariaDB가 시작되지 않음 (0) | 2022.10.30 |
Eclipse가 "JNI 공유 라이브러리를 로드하지 못했습니다"를 보고했습니다. (0) | 2022.10.29 |
matplotlib(피플롯)에서 프레임을 제거하는 방법.그림 vs matplotlib.그림 )(frameon=matplotlib의 잘못된 문제) (0) | 2022.10.29 |
Java에서는 어레이가 객체입니까? (0) | 2022.10.29 |