• 解決済 gosunatxra

    (@gosunatxra)


    はじめまして

    2.7.1から2.8.1へアップデート後、
    「公開日時を1960年代以前に設定している記事」の公開日時の表示(the_time())に、
    現在時刻が表示されるようになってしましました。

    「投稿編集」画面の投稿日時には現在時刻が表示されていますが、
    「編集」をクリックすると本来の日時が設定されています。

    修正箇所など助言いただければ幸いです。よろしくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • wp-includes/functions.php Revision 10407 -> Revison 10408 で
    行われた function mysql2date への変更が原因のようです。
    Optimizations for mysql2date() http://core.trac.wordpress.org/ticket/8166

    mysql2date() を Revision 10407 に戻すとうまくいくのですが、
    1960年代以前の日付が使えないのは仕様なのでしょうか。

    主観+憶測で書きます。
    頓珍漢な回答だと思いますのでその辺りはご容赦を+解決方法じゃなくてごめんなさい。

    そもそもなぜ1960年以前の日時での公開日設定が必要なのでしょうか?

    私が思うに他Blogからの移行をするとしても、過去10年前後からの公開ではないでしょうか?
    新しく記事を書く場合は、数日前or本日or未来で書くと思うので1960年以前とか50年弱前の日付での
    公開記事を2009年に書く人は稀だと思います。
    そのため、想定していないのではないでしょうかね?
    過去49年まで遡って公開できるんだ~と感心した私がいます。

    PHPのdate()関数を見るとこのように書かれています。

    変更履歴

    バージョン 説明
    5.1.0 有効なタイムスタンプの範囲は、通常 Fri, 13 Dec 1901 20:45:54 GMT から Tue, 19 Jan 2038 03:14:07 GMT までです (これらの日付は、32 ビット符号付き整数の最小および最大値に 対応します)。 しかし、PHP 5.1 より前のバージョンでは、システム環境によっては (例: Windows) この範囲が 1970 年 1 月 1 日から 2038 年 1 月 19 日 までに制限されます。

    これが関係していると考えるのが普通でしょうか。

    トピック投稿者 gosunatxra

    (@gosunatxra)

    >masaru さん
    http://gosun.s317.xrea.com/ こちらで使っています。

    >shokun0803 さん
    情報ありがとうございます。
    php は 5.2 でした。

    当方の環境は以下の通りです。
    s317.xrea.com
    Apache 1.3.37
    PHP 5.2.5
    MySQL 5.1.22-rc

    http://wordpress.org/support/topic/285531?replies=8#post-1144644
    上記リンクを見ると、ホストの問題かなと思うのですが、、、

    wp2.7辺りのリビジョンから少しずつリビジョンを上げて動作確認をしたところ、
    Revision 10407 -> Revison 10408  を境に上記現象が起きた為、
    ここが原因だろうと思ったのですが、プログラミングに疎いもので、
    コードが問題なのか、サーバーの問題が顕在化したのかわからないのです。

    引き続き助言いただけたら幸いです。

    現在のインストール環境の問題なのではなく、wordpress自体がPHP5.1よりも前のバージョンで動くのですから、それにあわせたプログラミングがされていると見るべきです。
    そう考えれば仕様なのだと思いますが、都合が悪ければコアの修正かプラグインないしfunctions.phpにそれを可能とする記述を組み込むしかないのかもしれません。

    すみません、試してみました。
    テーマの

    <?php the_time('Y.m.d') ?>

    のような記述を

    <?php the_date_xml(); ?>

    のように記述しなおすと表現できるかもしれません。ただし体裁は変えられませんが・・・
    テンプレートタグ/the date xml

    トピック投稿者 gosunatxra

    (@gosunatxra)

    wp-includes/functions.php の mysql2date() から呼ばれている
    date_i18n の以下のコードがあります。
    ここで現在時刻が設定されてしますようです。

    これは shokun0803 さんのおっしゃった 5.1 制約によるものでしょうか?
    5.2以上ならコメントアウトしてもよいでしょうか?


    / Sanity check for PHP 5.1.0-
    if ( false === $i || intval($i) < 0 ) {
    if ( ! $gmt )
    $i = current_time( 'timestamp' );
    else
    $i = time();
    // we should not let date() interfere with our
    // specially computed timestamp
    $gmt = true;
    }

    トピック投稿者 gosunatxra

    (@gosunatxra)

    trac にパッチを送りました。上記の環境以外でのテストをしていただけると助かります。
    Backdated pre-1st January 1970 post displayed as published on the current viewing day
    http://core.trac.wordpress.org/ticket/10332

    本家のフォーラムにこの問題についてのトピックがありましたので、
    そちらにも書き込みました。

    Bug with backdated post before 1 January 1970 – wp2.8
    http://wordpress.org/support/topic/285531

    いろいろと助言いただき、ありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「「公開日時を1960年代以前に設定している記事」の公開日時の表示について」には新たに返信することはできません。