为什么我需要设置我的PHP时区,而它已经在WordPress中设置了?

时间:2022-01-16 作者:Gavin

我已在设置中将WordPress设置为洛杉矶时间>;全体的在我的数据库中,我有一个DATETIME列。当我使用$dt = DateTime::createFromFormat(\'Y-m-d H:i:s\', $value_from_db); 然后$dt->format(\'n/j/y @ g:iA T\'); 它将时区显示为“;UTC;。在函数中。php如果我添加date_default_timezone_set( get_option(\'timezone_string\') ); 然后,$dt将正确输出,并带有;PST";。

它可以工作,但我不认为我需要显式设置时区,因为我已经在WordPress中设置了它。我是否做错了什么,或者这是为我的PHP设置时区的正确方法?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

在函数中。php如果我添加date_default_timezone_set( get_option(\'timezone_string\') ); 然后,$dt将正确输出,并带有;PST";。

是的,但是不更改PHP时区date_default_timezone_set() (这个是hard 正确堆芯操作要求!)“S”https://make.wordpress.org/core/2019/09/23/date-time-improvements-wp-5-3/.

我不认为我需要显式设置时区,因为我已经在WordPress中设置好了

WordPress确实使用您在那里设置的内容,但WordPress没有将其设置为默认(PHP)时区。

WordPress主要在计算日期和时间时使用它(基于PHP timezone string 或±HH:MM偏移),因此,为了获得正确的计算,WordPress在加载WordPress时将默认时区设置为UTC(请参阅wp-settings.php, 第68行)。

因此,您可以使用date_i18n() 要获得相同的“;PST“;如您所说,即根据您的站点设置,同一日期具有正确的时区。例如。

$value_from_db = \'2022-01-16 09:00:00\'; // value hard-coded for testing

// If the site\'s time zone is America/Los_Angeles, this would output 1/16/22 @ 9:00AM PST
echo date_i18n( \'n/j/y @ g:iA T\', strtotime( $value_from_db ) );

/* You\'d see the exact same output as when using:
date_default_timezone_set( \'America/Los_Angeles\' );
$dt = DateTime::createFromFormat( \'Y-m-d H:i:s\', $value_from_db );
echo $dt->format( \'n/j/y @ g:iA T\' ); // 1/16/22 @ 9:00AM PST
*/
或者您可以使用wp_date(), 但文件上说:“我不知道你是谁。”注意,与date_i18n(), 此函数接受真实的Unix时间戳,而不是与时区偏移量求和“;,也就是说,如果GMT偏移量为-8(比GMT/UTC晚8小时),则wp_date() 将返回一个8小时的日期less than 返回的日期date_i18n().

$value_from_db = \'2022-01-16 09:00:00\'; // value hard-coded for testing

// If the site\'s time zone is America/Los_Angeles, this would output 1/16/22 @ 1:00AM PST
echo wp_date( \'n/j/y @ g:iA T\', strtotime( $value_from_db ) );
所以你应该使用date_i18n()wp_date() 根据您的具体要求。

您可能还对以下方面感兴趣:

  • wp_timezone() — 从站点设置中将时区检索为DateTimeZone 对象,例如。wp_timezone()->getName() 可能会回来America/Los_Angeles.

  • wp_timezone_string() — 从站点设置中以字符串形式检索时区,例如。America/Los_Angeles-08:00.

相关推荐

Date, Time, and Timezones

我对在WordPress中使用日期/时间和时区有点困惑。我有以下问题:“管理->设置”部分中时区设置的目的是什么?假设当前格林尼治时间是20:00,假设我在东部时间(东部时间是16:00),那么博客的时间是如何节省的?假设一位读者正在阅读帖子,而他/她位于土耳其。所以他们的当地时间是23:00,他们认为23:00是发布时间吗?假设我使用的是自定义帖子类型,并且我有一个额外的日期/时间字段用于其他日期信息。如何确保自定义日期字段的行为与WordPress字段相同?对于这些基本问题,我深表歉意,但我真的