2017-04-17 5 views
1

Ich manipuliere meine Daten mit dem php Carbon Paket in meiner Laravel App. Ich habe einige seltsame Ergebnisse, wenn ein Datum (x Tage in der Zukunft) zu erzeugen versuchenCarbon gibt das falsche Datum zurück

Bitte nehmen Sie sich einen Blick auf diesen Code:

$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); 

Der obige Code wird aus den folgenden Debug-Zeilen drucken:

2017-04-17 21:46:31] local.DEBUG: Carbon :: now(): 2017-04-17 21:46:31
[2017.04.17 21.46.31 ] local.DEBUG: Kohlenstoff :: morgen (Europa/London): 2017-04-18 00:00:00 [2017-04-17 21:46:31] local.DEBUG: $ start_date: 2017.05.16 00.00.00 [2017.04.17 21.46.31] local.DEBUG: $ end_date: 2017-05-16 00:00:00

Verwendung von Kohlenstoff: : tomorrow() gibt die korrekten Daten aus, wobei jedoch $ start_time verwendet wird, das technisch die gleiche Funktion verwendet, gibt das falsche Datum zurück. Kann mir jemand sagen, was hier schief gehen könnte?

FYI Ich habe Europa/London als meine Zeitzone in meiner config/app.php Datei eingestellt.

+1

'AddDays()' modifiziert das Carbon-Objekt .... [Carbon-AddDays(), aber ohne Modyfing vorhandene Instanz] (https://laracasts.com/discuss/channels/laravel/carbon-adddays-but -without-modyfing-existing-instance) $ end_date = $ start_date-> copy() -> addDays ($ tier-> duration_days); ' –

Antwort

3

$date->addDays gibt tatsächlich keine Instanz mit den hinzugefügten Tagen zurück, sondern gibt die gleiche Instanz zurück, nachdem die Tage geändert wurden (was einen großen Unterschied macht).

Daher sollten Sie zuerst das Datum in eine neue Instanz kopieren und dann die Tage hinzufügen.

$start_date->copy()->addDays($tier->duration_days); 
Verwandte Themen