9

私はこの非常に単純なコードを持っています:

$start_date = new DateTime($post['start_date']);
$end_date = $start_date->add(new DateInterval('P6M'));
echo $start_date->getTimestamp(); // 1351836000
echo $end_date->getTimestamp(); // 1351836000

もちろん、日付間隔を追加すると元の$ start_dateに影響するため、両方が同じタイムスタンプになります。では、元の$ start_dateを保持しながら、別の変数で6か月追加できるようにするには、どうすればよいでしょうか。

私は運が悪かったのでこれを試しました:

$start_date = new DateTime($post['start_date']);
$start_date_actual = $start_date;
$end_date = $start_date_actual->add(new DateInterval('P6M'))->getTimestamp();
4

3 に答える 3

19

変数は、オブジェクト自体ではなく、オブジェクトへの参照を保持します。したがって、割り当ては、オブジェクトの複数のコピーではなく、同じオブジェクトを指すより多くの変数を取得するだけです。

コピーが必要な場合は、次のcloneキーワードを使用します。

$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
于 2012-05-02T18:48:13.100 に答える
2

あなたはあなたの選択を取ることができます:

$start_date = new DateTime($post['start_date']);
$end_date = new DateTime($post['start_date']);
$end_date->add(new DateInterval('P6M'));

また

$start_date = new DateTime($post['start_date']);
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
于 2012-05-02T18:48:00.593 に答える
0

変更する前に開始日を複製します。

$start_date = new DateTime();
$end_date = clone $start_date;
$end_date->add(new DateInterval('P6M'));
echo $start_date->getTimestamp();
echo $end_date->getTimestamp();

詳細については、マニュアルを参照してください

于 2012-05-02T18:48:08.830 に答える