如何设置WordPress时区?

时间:2011-02-02 作者:user1462

有人能告诉我如何获取WordPress管理中设置的时区吗?

例如,如果博客设置为东部时间,我需要精确的字符串来打印:

美国/东部

这是针对存在于函数中的函数。php在我的主题中。

8 个回复
最合适的回答,由SO网友:Bainternet 整理而成

如果需要gmt\\u偏移,则

<?php echo get_option(\'gmt_offset\'); ?>

这将得到一个整数,如2 or -2.

如果需要时区字符串,请使用

<?php echo get_option(\'timezone_string\'); ?>

这会给你一个字符串America/Indianapolis

SO网友:Rarst

不幸的是,确实有两种不同的选择:

更新的timezone_string, 这节省了PHP风格的时区gmt_offset, 它以小时为单位保存数字浮动偏移量但在较新的环境中timezone_string 实际覆盖gmt_offset, 后者返回的值将基于前者。然而,相反的说法并不正确-gmt_offset 可能有效,而timezone_string 为空。

WordPress 5.3已发货wp_timezone() 函数,它对此进行抽象并返回有效的DateTimeZone 对象,而不考虑基础WP设置。

在此之前,我在WpDateTime library (对于用作核心实施基础的琐事):

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

SO网友:Travis Northcutt

检查Option Reference page. 选项gmt_offset 返回一个整数。例如,如果时区设置为东部时间(例如美国/纽约),gmt_offset 应为-5。

SO网友:goldenapples

别以为你会得到像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.
 ?>

SO网友:Pål Bergquist

鉴于wordpress在选项表中保留时区字符串,您可以使用面向对象的方法在wordpress站点上获取正确的时间:

$tz = new DateTimeZone(get_option(\'timezone_string\'));
$dt = new DateTime("now", $tz);

$page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";

SO网友:Jeff Vdovjak

添加到BainerNet(我添加这个作为一个答案,因为我不能发表评论——我在WP开发堆栈上的分数不到50分)。

如果您在“常规设置”中选择时区字符串,WordPress将只存储时区字符串。UTF选择是列表中的默认值,但您可以滚动到时区字符串。如果设置时区字符串,将同时设置UTF和时区字符串。它们将是相同的(这意味着,当您选择时区字符串时区时,UTF将重置为新区域)。

(WordPress 4)

SO网友:Ryan Taylor

有几个选择,没有一个真正有效。这是一个WordPress bug,它真的很糟糕,因为时间不对,除非您将站点设置为UTC。。。这令人困惑,甚至不可能。

我认为,只有当您选择时区(在管理中的“设置->常规”下)作为命名城市而不是GMT数字偏移量时,下一个代码才有效。我还没有测试过,但很可能get_option(\'gmt_offset\') 设置时间get_option(\'timezone_string\') 不是。

date_default_timezone_set(get_option(\'timezone_string\'));
这样做的缺点是,WordPress在创建mysql时间戳时假设PHP设置为UTC,因此每当您切换时区时,您都可能会把数据库弄得一团糟!更不用说其他WP插件可能会假设PHP环境始终处于UTC。

因此,如果您只需要一个正确的时间,可以使用以下命令强制时间戳为UTC:

get_post_time(\'c\', true); //should work for non-post objects.
不幸的是,虽然正确,但它会将时区设置为UTC。

注意你不能both 使用“true”标志and 默认的timezone\\u set函数。

任何合适的解决方案都将是一段代码片段,可以解释这两者gmt_offsettimezone_string 并使用它们在某些输入上设置时区。WP假设PHP在处理mysql时间戳时设置为UTC,这可能会破坏其他插件。

有一个这样的解决方案https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ 但是,这也是一个BUG,因此您应该使用get_post_time($date_format, TRUE) 获取实际正确的时间戳的代码。

SO网友:Brennan

Like Rarst said, 但要获得实际字符串,请使用getName DateTimeZone的方法。

wp_timezone()->getName()

如果您想要缩写:

wp_date(\'T\')

结束

相关推荐

以AutoFocus主题为灵感设计一个定制的Archive.php

我一直在尝试使用Autofocus theme 在不同的主题中,通过复制粘贴索引中的代码。php中的自动聚焦主题到我的新归档文件中。php文件。我还从函数中复制了相关函数。php从Autofocus开始,我还尝试将一些css转换到新主题。我已经尝试了很长一段时间,并多次调整,但我无法让它工作。我同时获得图像和文本,但与自动对焦主题中的样式不同,而且绝对不会在前屏幕上使用自动对焦的裁剪。我错过什么了吗?如果我把所有的功能都抄了,难道不行吗。将php导入到新的中并复制所有css?