4

PHP で Carbon を使用していくつかの日付を作成していますが、何か間違っているようです。

これが私のコードです:

$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = $start->addWeeks(3);

echo "start time: " . $start;
echo "<br />";
echo "end time: " . $end;

上記の出力は、2 つのまったく同じ日付です。

start time: 2015-07-01 00:00:00
end time: 2015-07-01 00:00:00

ここにあるドキュメントを参照しました: http://carbon.nesbot.com/docs/#api-addsub . 誰かが私が間違っていることを知っていますか?

4

4 に答える 4

8

私はまだ Carbon を扱ったことはありませんが、これらの Carbon オブジェクトは変更可能だと思います。$thisまた、ほとんどの関数はメソッドチェーン (別名fluent interface ) のために返されるようです。

したがって、$end = $start->addWeeks(3);your$endを実行すると、実際には と同じオブジェクトになります$start。(ただの賢明な推測)

これを回避するにはclone、オブジェクトを操作する前に (可能であれば)、別のオブジェクトを作成してください。

バージョン 1

$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = clone $start;
$start->addWeeks(3);

バージョン 2

$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$start->addWeeks(3);
于 2015-09-15T14:56:24.103 に答える
0

$end は追加後の $start と同じ値になり、変更されていないように見えます。しかし、それは持っています:

>>> use Carbon\Carbon;
=> false
>>> $start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
=> Carbon\Carbon {#766
     +"date": "2015-07-16 00:00:00",
     +"timezone_type": 3,
     +"timezone": "Asia/Bangkok",
   }
>>> $end = $start->addWeeks(3);
=> Carbon\Carbon {#766
     +"date": "2015-08-06 00:00:00",
     +"timezone_type": 3,
     +"timezone": "Asia/Bangkok",
   }
>>> $end
=> Carbon\Carbon {#766
     +"date": "2015-08-06 00:00:00",
     +"timezone_type": 3,
     +"timezone": "Asia/Bangkok",
   }
>>> $start
=> Carbon\Carbon {#766
     +"date": "2015-08-06 00:00:00",
     +"timezone_type": 3,
     +"timezone": "Asia/Bangkok",
   }
于 2015-09-15T14:50:58.270 に答える