답변:
gmt_offset이 필요한 경우
<?php echo get_option('gmt_offset'); ?>
이것은 2 또는 -2 와 같은 정수를 줄 것 입니다.
시간대 문자열 사용이 필요한 경우
<?php echo get_option('timezone_string'); ?>
이것은 당신에게 America / Indianapolis 와 같은 줄을 줄 것입니다
불행한 상황은 실제로 두 가지 다른 옵션이 있다는 것입니다.
timezone_string
PHP 스타일의 시간대를 절약하는 Newergmt_offset
는 숫자로 된 부동 소수점 오프셋을 시간 단위로 저장합니다.그러나 새로운 환경에서 timezone_string
실제로 재정의 gmt_offset
하면 후자가 반환하는 값은 전자를 기반으로합니다. 그러나 그 반대 는 사실이 아닙니다 . 비어 gmt_offset
있을 때 유효 할 수 있습니다 timezone_string
.
나는 이것들에 꽤 많은 시간을 보냈으며, 내가 WpDateTime
도서관 에서 구현 한 가장 최근에 취한 것은 다음과 같습니다.
class WpDateTimeZone extends \DateTimeZone {
/**
* Determine time zone from WordPress options and return as object.
*
* @return static
*/
public static function getWpTimezone() {
$timezone_string = get_option( 'timezone_string' );
if ( ! empty( $timezone_string ) ) {
return new static( $timezone_string );
}
$offset = get_option( 'gmt_offset' );
$hours = (int) $offset;
$minutes = abs( ( $offset - (int) $offset ) * 60 );
$offset = sprintf( '%+03d:%02d', $hours, $minutes );
return new static( $offset );
}
}
정보가 사용 가능한 한 가능한 모든 경우에 의미있는 표준 시간대 개체를 인스턴스화하려고 시도합니다.
(int)
$을위한 시간과 floor
문제가있는 분 $ 하시나요? 문서에 따르면, (int)
과 floor
를 제외하고 거의 동일 (int)
-4 -4.5 반올림하고 floor
는 -5 반올림됩니다. 잘못된 음의 시간대 오프셋을 줄 것 같습니다.
옵션 참조 페이지를 확인 하십시오 . 이 옵션 gmt_offset
은 정수를 반환합니다. 예를 들어 시간대가 동부 시간 (예 : America / New_York)으로 설정된 gmt_offset
경우 -5 여야합니다.
배열에 원하는 모든 문자열을 저장하고 참조하지 않고 US / Eastern 과 같은 문자열을 얻을 것이라고 생각하지 마십시오 . PHP를 사용하면 시간대 약어, 즉 EST를 얻을 수 있습니다 . 원하는 문자열을 가진 배열에 해당 값이 저장되어 있으면 값을 찾을 수 있습니다.
<?php date_default_timezone_set(get_option('timezone_string'));
echo date('T'); // will give you three-character string like "EST"
$timezones = array (
'EST' => 'US/Eastern',
'CST' => 'US/Central',
// etc, etc, etc.
);
echo $timezones [ date('T') ]; // should be what you want.
?>
몇 가지 옵션이 있지만 그중 어느 것도 실제로 효과적이지 않습니다. 이것은 WordPress 버그이며 사이트를 UTC로 설정하지 않으면 시간이 잘못되어 진정으로 짜증납니다. 혼란스럽고 항상 가능하지는 않습니다.
다음 코드는 GMT 번호 오프셋 대신 시간대 (관리자에서 설정-> 일반)를 명명 된 도시로 선택한 경우에만 작동한다고 생각합니다. 나는 이것을 테스트 하지 않았지만 그렇지 않을 get_option('gmt_offset')
때 설정되는 get_option('timezone_string')
것이 가능합니다 .
date_default_timezone_set(get_option('timezone_string'));
단점은 워드 프레스는 mysql 타임 스탬프를 만들 때 PHP가 UTC로 설정되어 있다고 가정하므로 시간대를 전환 할 때마다 데이터베이스를 약간 엉망으로 만들 수 있다는 것입니다! 다른 WP 플러그인은 PHP 환경이 항상 UTC라고 가정 할 수 있습니다.
따라서 정확한 시간을 원한다면 다음을 사용하여 타임 스탬프를 UTC로 강제 설정할 수 있습니다.
get_post_time('c', true); //should work for non-post objects.
불행히도 정확하지만 시간대는 UTC로 설정됩니다.
"true"플래그 와 기본 timezone_set 함수를 모두 사용할 수는 없습니다 .
모든 적절한 솔루션은 거 모두 차지하는 코드 조각 할 수 있습니다 gmt_offset
및 timezone_string
일부 입력에 시간대를 설정을 사용합니다. WP는 mysql 타임 스탬프를 수행 할 때 PHP가 UTC로 설정된 것으로 가정하고 다른 플러그인을 중단 할 수 있습니다.
https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ 에는 이러한 솔루션 이 있지만 다시 한 번 버그이므로 get_post_time($date_format, TRUE)
코드를 사용하여 타임 스탬프를 가져와야합니다. 실제로 맞습니다.