WordPressのタイムゾーン設定を取得するにはどうすればよいですか?
7 回答
- 投票
-
- 2011-02-02
gmt_offsetが必要な場合は、
<?php echo get_option('gmt_offset'); ?>
これにより、 2または-2 のような整数が得られます.
タイムゾーン文字列が必要な場合は
<?php echo get_option('timezone_string'); ?>
これにより、アメリカ/インディアナポリス
のような文字列が表示されますif you need the gmt_offset then
<?php echo get_option('gmt_offset'); ?>
this will give you an integer like 2 or -2.
and if you need the timezone string use
<?php echo get_option('timezone_string'); ?>
this will give you a string like America/Indianapolis
-
私のtimezone_stringはデータベースにありますが、設定ページで別のタイムゾーンを選択した後でも空です.どうなるのでしょうか?(WP3.6)My timezone_string is in the database but it is empty, even after selecting a different timezone on the settings page. What might be the case? (WP3.6)
- 7
- 2013-09-13
- user2019515
-
gmt_offestは、サイトのタイムゾーン設定に基づいて夏時間を考慮しますか?Does gmt_offest take daylight savings into account based on the site's timezone setting?
- 0
- 2013-12-19
- squarecandy
-
@ user2019515タイムゾーンとして都市を選択すると、「timezone_string」オプションに保存されますが、手動オフセット(UTC + 1など)を選択すると、「gmt_offset」オプション(「1」として)とtimezone_stringに保存されます.空のままです.@user2019515 If you choose a city as a timezone it will save to the "timezone_string" option but if you choose a Manual Offset (UTC+1 for instance) it is saved to the "gmt_offset" option (as "1") and timezone_string remains empty.
- 7
- 2017-03-27
- Berend
-
- 2017-10-16
残念なことに、実際には2つの異なるオプションがあります.
- PHPスタイルのタイムゾーンを保存する新しい
timezone_string
. - 古い
gmt_offset
は、数値のフロートオフセットを時間単位で保存します.
ただし、新しい環境では、
timezone_string
は実際にはオーバーライドgmt_offset
であり、後者によって返される値は前者に基づいています.ただし、反対は正しくありません—gmt_offset
は有効である可能性がありますが、timezone_string
は空です.WordPress5.3には
wp_timezone()
関数が同梱されていました、これを抽象化し、基になるWP設定に関係なく、有効なDateTimeZone
オブジェクトを返します.以前は、
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 ); } }
The unfortunate situation is that there are indeed two different options:
- Newer
timezone_string
, which saves PHP–style time zone. - Older
gmt_offset
, which saves numeric float offset in hours.
But in newer environments
timezone_string
actually overridesgmt_offset
, the value returned by the latter will be based on the former. However the opposite isn't true —gmt_offset
might be valid, whiletimezone_string
is empty.WordPress 5.3 had shipped
wp_timezone()
function, that abstracts this and returns a validDateTimeZone
object, regardless of underlying WP settings.Before that I had a take on it implemented in my
WpDateTime
library (for trivia that was used as a basis for core implementation):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 ); } }
-
これは受け入れられた答えでなければなりません.get_option( 'timezone_string')のみに依存していると、バグが発生します.This should be the accepted answer. People will run into bugs if they rely solely on get_option('timezone_string').
- 1
- 2018-08-14
- DiscoInfiltrator
-
これが正解です.This is the correct answer.
- 0
- 2018-12-09
- Lucas Bustamante
-
$ hoursに `(int)`を使用し、$minutesに `floor`を使用することに問題はありませんか?ドキュメントによると、 `(int)`と `floor`はほぼ同じですが、`(int) `は-4.5から-4に丸められ、`floor`は-5に丸められます.これは、誤った負のタイムゾーンオフセットを与えるように思われますか?Isnt use of `(int)` for $hours and `floor` for $minutes problematic? According to documentation, `(int)` and `floor` are almost the same except `(int)` will round -4.5 to -4 and `floor` will round it to -5. This seems like it will give incorrect negative timezone offsets?
- 0
- 2019-05-13
- Mikepote
-
@Mikepoteええ、これはずっと前にlibで修正されました、ここの答えのコードの古いコピーです.@Mikepote yeah, this was fixed in the lib a long time ago, just stale copy of the code in the answer here.
- 1
- 2019-05-15
- Rarst
-
なんてこった、なぜ彼らはそれをこのように実装したのか....それは私に1時間*傾斜*を要したOh my god why did they implement it like this .... It costed me a full hour *tilt*
- 0
- 2019-06-21
- Blackbam
-
libは、1つのタイムゾーンに複数のオフセットを含めることができるという事実を処理しますか?参照:https://stackoverflow.com/tags/timezone/infoDoes the lib handle the fact that one timezone can contain multiple offsets? See: https://stackoverflow.com/tags/timezone/info
- 0
- 2019-11-27
- DarkNeuron
-
@DarkNeuron libは、olsonデータベースを含み使用するPHPにそれを任せます.@DarkNeuron lib just leaves that to PHP, which includes and uses olson database.
- 0
- 2019-11-29
- Rarst
-
- 2011-02-02
オプションリファレンスページを確認してください.オプション gmt_offset
は整数を返します.たとえば、タイムゾーンが東部標準時に設定されている場合(America/New_Yorkなど)、gmt_offset
は-5である必要があります.Check the Option Reference page. The option
gmt_offset
returns an integer. For example, if the timezone is set to Eastern time (e.g. America/New_York),gmt_offset
should be -5. -
- 2011-02-03
必要なすべての文字列を配列に格納して参照せずに、 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. ?>
Don't think you're gonna get a string like US/Eastern without storing all the strings you want in an array and referring to them. Using PHP you can get the timezone abbreviation, ie EST; and if you have those values stored in an array with the strings you want, you can look them up.
<?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. ?>
-
これは不要です.[タイムゾーン標準](http://php.net/manual/en/timezones.php)は、[DateTimeZoneオブジェクト](http://php.net/manual/en/)と同様に、5.2以降PHPの一部になっています.datetimezone.getname.php)および関連する標準関数.This is unnecessary. The [timezone standards](http://php.net/manual/en/timezones.php) have been part of PHP since 5.2, as has the [DateTimeZone object](http://php.net/manual/en/datetimezone.getname.php) and the related standard functions.
- 0
- 2018-10-24
- haz
-
- 2019-08-05
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>";
Given the fact that wordpress keeps the timezone string in the options table, you can use the object oriented way of getting the right time on your wordpress site:
$tz = new DateTimeZone(get_option('timezone_string')); $dt = new DateTime("now", $tz); $page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
-
- 2014-12-11
Bainternetに追加するには(コメントできないため、これを回答として追加します.WP開発スタックのポイントは50未満です).
WordPressは、一般設定でタイムゾーン文字列を選択した場合にのみタイムゾーン文字列を保存します.UTFの選択は、リストのデフォルトの場所ですが、タイムゾーン文字列までスクロールできます.タイムゾーン文字列を設定すると、UTFとタイムゾーン文字列の両方が設定されます.それらは同じになります(つまり、タイムゾーン文字列timezoneを選択すると、UTFは新しいゾーンにリセットされます).
(WordPress 4)
To add to Bainternet (I am adding this as an answer because I cannot comment -- I have less than 50 points on WP Development stack).
WordPress will only store a timezone string if you select a timezone string in the general settings. UTF selection is where it defaults in the list, but you can scroll way up to timezone strings. If you set a timezone string, both the UTF and the Timezone string will be set. They will be the same (meaning, the UTF gets reset to the new zone when you select a timezone string timezone).
(WordPress 4)
-
- 2015-11-06
いくつかのオプションがありますが、どれも実際にはうまく機能しません.これはWordPressのバグであり、サイトをUTCに設定しない限り時間が間違っているため、本当にひどいです...これは混乱を招き、常に可能であるとは限りません.
この次のコードは、GMT番号のオフセットではなく、名前付きの都市としてタイムゾーン([設定]-> [管理者]の[一般])を選択した場合にのみ機能すると思います.これはテストしていませんが、
get_option( 'timezone_string')
が設定されていないときにget_option( 'gmt_offset')
が設定されている可能性があります.date_default_timezone_set(get_option( 'timezone_string'));
これの欠点は、WordPressがmysqlタイムスタンプを作成するときにPHPがUTCに設定されていると想定しているため、タイムゾーンを切り替えるたびにデータベースを少し混乱させる可能性があることです.言うまでもなく、他のWPプラグインは、PHP環境が常にUTCであると想定している場合があります.
したがって、正しい時刻が必要な場合は、次の方法でタイムスタンプをUTCにすることができます.
get_post_time( 'c'、true);//投稿以外のオブジェクトで機能するはずです.
残念ながら、正しいとはいえ、タイムゾーンがUTCに設定されます.
また、両方の「true」フラグをおよびデフォルトのtimezone_set関数を使用することはできないことに注意してください.
適切なソリューションは、
gmt_offset
とtimezone_string
の両方を考慮し、それらを使用して一部のタイムゾーンを設定するコードスニペットになります.入力. WPは、mysqlタイムスタンプを実行するときにPHPがUTCに設定されていることを前提としており、他のプラグインを壊す可能性があります.https://にそのような解決策が1つあります. www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ですが、これもバグなので、
get_post_time($ date_format、TRUE)<を使用する必要があります./code>実際に正しいタイムスタンプを取得するためのコード.
There are a few options, none of which really work great. This is a WordPress bug, and it genuinely sucks because the time is wrong unless you set your site to UTC... which is confusing and not always even possible.
This next code I think only works if you choose your Timezone (Under Settings -> General in admin) as a named city instead of by an GMT number offset. I haven't tested this but it's very possible that
get_option('gmt_offset')
is set whenget_option('timezone_string')
is not.date_default_timezone_set(get_option('timezone_string'));
The downside of this is that WordPress assumes PHP is set to UTC when making mysql timestamps, so you can mess up your database a little bit whenever you switch timezones! Not to mention other WP plugins may assume that the PHP environment is always in UTC.
So, if you just want a correct time -- you can force your timestamp to be in UTC with:
get_post_time('c', true); //should work for non-post objects.
Unfortunately, although correct, it'll make the timezone get set to UTC.
And note that you can't both use the "true" flag and the default timezone_set function.
Any proper solution is gonna be a code-snippet that accounts for both
gmt_offset
ANDtimezone_string
and uses them to set a timezone on some input. WP assumes that PHP set to UTC when doing mysql timestamps, and it might break other plugins.There's one such solution on https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ but, again this is a BUG, so you should use the
get_post_time($date_format, TRUE)
code to get a timestamp that is actually correct.
WordPress管理者で設定されているタイムゾーンを取得する方法を教えてもらえますか?
たとえば、ブログが東部標準時に設定されている場合、印刷するには次の正確な文字列が必要です.
これは、私のテーマのfunctions.phpにある関数用です.