2017-04-17 19 views
1

私のLaravelアプリ内でPHP Carbonパッケージを使用して日付を操作しています。カーボンが間違った日付バグを返す

$start_date = Carbon::tomorrow('Europe/London'); 
$end_date = $start_date->addDays($tier->duration_days); 
Log::debug('Carbon::now(): '.Carbon::now()); 
Log::debug('Carbon::tomorrow(Europe/London): '.Carbon::tomorrow('Europe/London')); 
Log::debug('$start_date: '.$start_date); 
Log::debug('$end_date: '.$end_date); 

は、上記のコードは次のデバッグ行を印刷します::

(将来的にはX日)日

は、このコードを見てみてくださいを生成しようとしているとき、私はいくつかの奇妙な結果を持っています

2017年4月17日午前21時46分31秒] local.DEBUG:今カーボン::():2017年4月17日午前21時46分31秒
[2017年4月17日午前21時46分31秒] local.DEBUG:Carbon ::明日(ヨーロッパ/ロンドン): 2017-04-18 00:00:00 [2017-04-17 21:46:31] local.DEBUG:$ start_date: 2017年5月16日午後12時00分00秒[2017年4月17日午前21時46分31秒] local.DEBUG:$のEND_DATE:カーボンを使用して 2017年5月16日午後12時00分00秒

: :tomorrow()は正しい日付を出力しますが、技術的に同じ関数を使っている$ start_timeを使うと間違った日付が返されます。 誰かがここで間違っている可能性があることをアドバイスできますか?

はFYI私は私のconfig/app.phpファイルの私のタイムゾーンとしてヨーロッパ/ロンドンを設定しています。

+1

'addDays()' ....炭素オブジェクトを変更[カーボンaddDays()が、既存のインスタンスをmodyfingせず](https://laracasts.com/discuss/channels/laravel/carbon-adddays-but $ end_date = $ start_date-> copy() - > addDays($ tier-> duration_days); ' –

答えて

3

$date->addDaysは、実際には(差の多くを行う)日を変更した後に同じインスタンスを返し、追加日とインスタンスを返しません。

そのためには、まず新しいインスタンスに日付をコピーし日間追加する必要があります。

$start_date->copy()->addDays($tier->duration_days); 
関連する問題