15

DB テーブルにはdatetime、フィールド タイプとしていくつかのフィールドがあります。したがって、データを日時オブジェクトとしてのみ保持する必要があります。

フォームから、日時を次のような文字列として取得します

2012-10-05 17:45:54

エンティティを永続化するたびに、次のエラーが発生します。

致命的なエラー: 44 行目の ..\DateTimeType.php の非オブジェクトに対するメンバー関数 format() の呼び出し

で試しました

$protocol->setStartedAt(strtotime($post['started_at']));

また

$from = \DateTime::createFromFormat('yy-mm-dd hh:mm:ss', $post['started_at']);
$protocol->setStartedAt($from);

あるいは単に

$from = new \DateTime($post['started_at']);
$protocol->setStartedAt($from);

最後のコードは機能しますが、引数として渡されたタイムスタンプを使用せず、現在の時刻を取得するだけです。

何か案は?

4

3 に答える 3

21

私は常にDateTimeコンストラクターを使用してオブジェクトを作成します。あなたの場合は次のようになります。

$protocol->setStartedAt(new \DateTime($post['started_at']));

これが機能するが、投稿されたタイムスタンプを使用しない場合は、おそらく に値がありません$post['started_at']。デバッグしてみるか、単に汚いトリックを実行してください。

die($post['started_at']);
于 2012-10-06T15:07:44.690 に答える
12

いつか必ずこの問題に遭遇する将来の読者のために(これは「symfony 2 datetime from string」をグーグルで検索した場合の最初の投稿です)、Symfony 2 では DateTime オブジェクトはその形式の文字列を受け入れないことに注意してください: "d/m/Y H:i:s"、おそらく他の多くもサポートしていません。

それに腹を立てないようにするために、このようなエラーを回避するための最も簡単で安全な解決策は次のとおりであることを実際に発見しました。

まず、実行しているリクエストの種類 (私の場合は一般的な AJAX リクエスト) から日付文字列を取得し、それをDateTime Objectに変換します。この例では、 の dateTime オブジェクトを作成する必要があると想定してい25/04/2015 15:00ます。 jQuery UI のイタリア語 DateTimePicker (これは単なる例です):

$literalTime    =   \DateTime::createFromFormat("d/m/Y H:i","25/04/2015 15:00");

(注: \php の DateTime オブジェクトを使用するために使用します。そうしないと、例外をスローする Symfony の datetime オブジェクトを使用することになります)

次に、最初のパラメーターに予想される出力形式を指定して、コンフォート形式関数を使用して日付文字列を作成します ( )。Y-m-d H:i:s

$expire_date =  $literalTime->format("Y-m-d H:i:s");

このようにして、あなたが期待するものを入力

この投稿は実際にはかなり古いものであることを知っていたので、他に価値のある情報源が見つからなかったので投稿することにしました。

最善の解決策は、日時文字列を正しい形式で送信することですが、文字通りそれを行う方法がない場合は、そのような文字列を変換する最も安全な方法は上記のものです。

于 2015-06-18T09:12:27.747 に答える
1

createFromFormat はどうですか?

http://uk.php.net/manual/en/datetime.createfromformat.php

$from = DateTime::createFromFormat($post['started_at'], 'Y-m-d H:i:s');
于 2012-10-05T16:14:39.763 に答える