当前位置: 首页>>网站问题>>正文


如何获得WordPress时区设置?

webfans 网站问题 , , , , 去评论

问题描述

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

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

US/Eastern

这是一个函数,它存在于我的主题中的functions.php中。

最佳解决方案

如果你需要gmt_offset那么

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

这将给你一个像2或-2的整数。

如果你需要使用时区字符串

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

这会给你一个像美国/印第安纳波利斯的字符串

次佳解决方案

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

第三种解决方案

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

  1. 较新的timezone_string,可以节省PHP风格的时区。

  2. 较旧的gmt_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 self
     */
    public static function getWpTimezone() {

        $timezone_string = get_option( 'timezone_string' );

        if ( ! empty( $timezone_string ) ) {
            return new self( $timezone_string );
        }

        $offset  = get_option( 'gmt_offset' );
        $hours   = (int) $offset;
        $minutes = ( $offset - floor( $offset ) ) * 60;
        $offset  = sprintf( '%+03d:%02d', $hours, $minutes );

        return new self( $offset );
    }
}

只要任何信息都可用,这将尝试在所有可能的情况下实例化有意义的时区对象。

第四种方案

不要以为你会得到像美国/东方这样的字符串,而不是将你想要的所有字符串存储在数组中并引用它们。使用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.
 ?>

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2436.html,转载请务必附带本地址声明。