J'essaie de créer quelques boutons de navigation dans un type d'agenda que je crée et d'utiliser carbone pour créer les dates.
C'est le code dans le contrôleur:
if ($date == null) {
$date = \Carbon\Carbon::now();
}else{
$date = \Carbon\Carbon::createFromFormat('Y-m-d', $date);
}
$navDays = ['-7Days' => $date->subDay('7')->toDateString(),
'-1Day' => $date->subDay('1')->toDateString(),
'Today' => $date->today()->toDateString(),
'+1Day' => $date->addDay('1')->toDateString(),
'+7Days' => $date->addDay('7')->toDateString()];
et puis je pense que je fais ceci:
@foreach($navDays as $key => $i)
<li><a href="/planner/bookings/{{ $i }}" class="small button">{{ $key }}</a></li>
@endforeach
Ce problème est que carbone semble changer la date $ lors de la création du tableau, car ce sont les dates à obtenir (avec $ date étant défini sur 2015-11-29):
<ul class="button-group even-5">
<li><a href="/planner/bookings/2015-11-22" class="small button">-7Days</a></li>
<li><a href="/planner/bookings/2015-11-21" class="small button">-1Day</a></li>
<li><a href="/planner/bookings/2015-12-22" class="small button">Today</a></li>
<li><a href="/planner/bookings/2015-11-22" class="small button">+1Day</a></li>
<li><a href="/planner/bookings/2015-11-29" class="small button">+7Days</a></li>
</ul>
Est-ce que quelqu'un sait ce que je fais mal?
Cordialement Johan
Lorsque vous exécutez ces méthodes sur un objet Carbon, celui-ci est mis à jour. Par conséquent, addDay()
fait avancer la valeur de Carbon d'un jour.
Voici ce que vous devez faire:
$now = Carbon::now();
$now->copy()->addDay();
$now->copy()->addMonth();
$now->copy()->addYear();
// etc...
La méthode copy crée essentiellement un nouvel objet Carbon auquel vous pouvez appliquer les modifications sans affecter la variable $now
d'origine.
Consultez la documentation: https://carbon.nesbot.com/docs/
Le problème est que vous supposez que subDay ()/addDay () ne modifie pas l'objet de date, alors qu'ils le font .... ils enveloppent simplement la méthode DateTime
object modify()
:
DateTime :: modify - date_modify - Modifie l'horodatage
(mon emphase)
Au lieu de cela, utilisez
$navDays = [
'-7Days' => (clone $date)->subDay('7')->toDateString(),
'-1Day' => (clone $date)->subDay('1')->toDateString(),
'Today' => (clone $date)->today()->toDateString(),
'+1Day' => (clone $date)->addDay('1')->toDateString(),
'+7Days' => (clone $date)->addDay('7')->toDateString()
];
Doco dit
Vous pouvez également créer un copy () d'une instance Carbon existante. Comme prévu, les valeurs de date, heure et fuseau horaire sont toutes copiées dans la nouvelle instance.
$dt = Carbon::now();
echo $dt->diffInYears($dt->copy()->addYear()); // 1
// $dt was unchanged and still holds the value of Carbon:now()