サポート » バグ報告と提案 » デフォルトウィジェットのRSSで記事の日時がUTCになっている

  • 解決済 Takayuki Miyauchi

    (@miyauchi)


    こんばんは。

    最近気がついたのですが、サイドバーウィジェットのRSSを使用すると、記事の日時がUTCで表示されてしまいます。(実際には日付しか表示されないのでわかりにくいですが。。。)
    ためしに、タイムゾーン設定で「UTC+9」と「東京」で試したのですが、同じでした。

    原因は、wp-settings.phpの
    31 if ( function_exists( 'date_default_timezone_set' ) )
    32 date_default_timezone_set( 'UTC' );

    ga
    に関連するものと思われますが、これは仕様なんでしょうか?

    どうやら、Wordressのデータベース以外の外部リソースから取得した日時(RSSの更新日やファイルのタイムスタンプなど)は全部UTCになってしまうようです。

    チケットの検索をしてみても、関連すると思われるチケットがfixedになっており、タイムゾーンに関する仕様の考え方がよくわかりません。
    http://core.trac.wordpress.org/search?q=date_default_timezone_set

    プラグインの開発で日時周りの処理をするのに、どうするべきか悩んでいるので、アドバイスをいただけると幸いです。

    自作のプラグインでは、現状は、以下のようなことをしています。
    $timestamp = $timestamp + 3600 * get_option('gmt_offset');
    でも、この処理は、「どっかで9引いちゃってるから適当に9足しとけ」みたいなきがして気持が悪いのです。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • バグ報告で投稿してきますか・・・

    なんどかこのフォーラムでも話がでています。
    http://ja.forums.wordpress.org/topic/4395?replies=12
    http://ja.forums.wordpress.org/topic/4884?replies=13
    http://ja.forums.wordpress.org/topic/2440?replies=10

    date_default_timezone_set('Asia/Tokyo');をwp-config.php とか、テーマの functions.phpに書くか、current_time( 'timestamp' );などのように取得するかではないですか。

    それでも納得がいきませんかね?

    スレッド開始 Takayuki Miyauchi

    (@miyauchi)

    shokun0803さん、こんにちは。

    > date_default_timezone_set(‘Asia/Tokyo’);をwp-config.php とか、テーマの
    > functions.phpに書くか、current_time( ‘timestamp’ );などのように取得するか
    > ではないですか。

    wp-config.phpに書いても、そのあとにwp-settigs.phpが読み込まれるので効果はないです。
    テーマのfunctions.phpなら効果はあるようですね。
    これは思いつきませんでした。(恥)

    ただし、この方法だと国際化したテーマの作者は、「functions.phpにdate_default_timezone_set(…)を追記するか子テーマをつくってね。」とアナウンスする必要があるということになりません?

    それに、この方法で変更していいのなら、最初からwp-settings.phpの、
    date_default_timezone_set('UTC');
    のところに管理画面のタイムゾーン設定が反映されるようにコアを修正してくれればいいと思うのですが。。。

    それをあえてそうしないのは他に影響があるのではないかと思うのですが、どうでしょう?
    だから、安易にdate_default_timezone_set()するのは正しいのかな?と疑問を感じます。

    ちなみにcurrent_time()は今の時間を取る関数なので、RSS内の日付やファイルの更新日の処理などには関係ないです。

    > バグ報告で投稿してきますか・・・

    以上のような理由で、バグっぽいなと思ったので、ここに書きました。
    管理画面に設定する画面があって、それだけでは上手く反映されないので。。。

    > それでも納得がいきませんかね?

    はい、納得してません(笑)

    まあ、リンクした他の記事を見てもらえれば私が納得していないのは明白ですが(笑)

    世界中で使用されているWordPressがUTCを基準として動作させ、多言語化されたプラグインでも不具合なく動かすことが目的であろうと、言いたいことは分かりますけどね。
    いっそのことインターネットタイムでも使えば?なんて皮肉ってみたり・・・

    どうやらチケットは切られたものの、仕様として現在に至るようなので、どうしてもと言うなら新たにtracで報告するしかないのかもしれません。もちろん英語ですが。
    ここのバグ報告は日本語翻訳などの間違いなどはすぐに反映してもらえますが、コアのバグ(と思われる箇所)に関しては誰かが公式に報告しない限り反映はしないと思いますよ;)

    スレッド開始 Takayuki Miyauchi

    (@miyauchi)

    すいません。
    自己解決します。

    1) date_default_timezone_set()を書いてしまうのはダメっぽいと個人的に判断しました。
    チケットでもパッチがボツになっていますし。
    https://core.trac.wordpress.org/ticket/11665
    多言語対応したテーマやプラグインに影響が出るのかな?(関係ないような気がするけど。。。)

    2) RSSウィジェットの日付がずれる件に関しては、自作プラグインで対処できることがわかったので、それを使用しつつも、本家のチケットにパッチを報告してみます。

    3)プラグイン開発などでは、外部リソースから取得した日付データに関しては、3600*get_option(‘gmt_offset’)を足すようにするしか無さそうなので、そうします。
    (コアでもそういう処理をしているところが多数ありましたので。)

    というわけで、shokun0803さん、ありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「デフォルトウィジェットのRSSで記事の日時がUTCになっている」には新たに返信することはできません。