2

createFromFormat の動作に混乱しています。

    private function _event_date($eventdate) {

    $this->_logger->err($eventdate);

    $dt = new DateTime();

    $dt->createFromFormat(DATE_ISO8601, $eventdate);

    $formatted = $dt->format("m/d/Y");

    $this->_logger->err($formatted);

    return $formatted;
}

_event_date を数回呼び出します。新しい DateTime オブジェクトを作成すると、$eventdate が受け入れられ、新しい書式設定された日付になることを期待しています。

奇妙なことに(私にとって)、私の出力は次のようになります。

2013-04-04 15:10:26 UTC error _event_date 2013-04-05T21:00:00-0400
2013-04-04 15:10:26 UTC error _event_date 04/04/2013
2013-04-04 15:10:26 UTC error _event_date 2013-04-12T20:00:00-0400
2013-04-04 15:10:26 UTC error _event_date 04/04/2013
2013-04-04 15:10:26 UTC error _event_date 2013-04-16T18:00:00-0400
2013-04-04 15:10:26 UTC error _event_date 04/04/2013
2013-04-04 15:10:26 UTC error _event_date 2013-04-17T19:30:00-0400
2013-04-04 15:10:26 UTC error _event_date 04/04/2013
2013-04-04 15:10:26 UTC error _event_date 2013-04-18T20:00:00-0400
2013-04-04 15:10:26 UTC error _event_date 04/04/2013

何らかの理由で、DateTime が元の $eventdate 値を保持しているようです。

どうしてこれなの?createFromFormat の仕組みについて何か誤解していますか? PHP のオブジェクト モデルについて何か不足していますか? PHP は私の飲み物に何かを入れましたか?

- - - - - - - 答え - - - - - - - -

以下のMarc Bの答えは問題を解決します:

    // month/day/year
private function _event_date($eventdate) {

    $this->_logger->err($eventdate);

    $dt = DateTime::createFromFormat(DATE_ISO8601, $eventdate);

    $formatted = $dt->format("m/d/Y");

    $this->_logger->err($formatted);

    return $formatted;
}

正しい結果が得られます。

2013-04-04 15:34:56 UTC error _event_date 2013-04-04T19:30:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/04/2013
2013-04-04 15:34:56 UTC error _event_date 2013-04-05T21:00:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/05/2013
2013-04-04 15:34:56 UTC error _event_date 2013-04-12T20:00:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/12/2013
2013-04-04 15:34:56 UTC error _event_date 2013-04-16T18:00:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/16/2013
2013-04-04 15:34:56 UTC error _event_date 2013-04-17T19:30:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/17/2013
2013-04-04 15:34:56 UTC error _event_date 2013-04-18T20:00:00-0400
2013-04-04 15:34:56 UTC error _event_date 04/18/2013
4

1 に答える 1

5

createFromFormat は静的メソッドです。

$date = DateTime::createFromFormat(DATE_ISO8601, $eventdate);

代わりは。

キャプチャしていないDateTimeオブジェクトを返します。そうです、コンストラクター引数として日付を渡さなかったため、以前に設定した日付を「覚えています」。これはたまたま「今」です。

于 2013-04-04T15:30:37.260 に答える