我正在尝试在我正在创建的日历类型中制作一些导航按钮,并使用碳来创建日期。
这是控制器中的代码:
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()];
然后我认为,我这样做:
@foreach($navDays as $key => $i)
<li><a href="/planner/bookings/{{ $i }}" class="small button">{{ $key }}</a></li>
@endforeach
这个问题是,碳似乎在数组创建期间改变了$ date,因为这些是我得到的日期($ date设置为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>
有人知道我做错了吗?
此致 约翰
答案 0 :(得分:31)
当您针对Carbon对象运行这些方法时,它会更新对象本身。因此addDay()
向前移动Carbon的值。
这是您需要做的事情:
$now = Carbon::now();
$now->copy()->addDay();
$now->copy()->addMonth();
$now->copy()->addYear();
// etc...
复制方法实质上创建了一个新的Carbon对象,然后您可以应用更改而不会影响原始$now
变量。
总之,复制Carbon实例的方法是:
copy
clone
- 别名copy
查看文档:{{3}}
答案 1 :(得分:10)
问题在于你假设subDay()/ addDay()没有改变日期对象,而他们确实......他们只是绕着{{1对象DateTime
方法:
DateTime :: modify - date_modify - 更改时间戳
(我的重点)
相反,请使用
modify()
答案 2 :(得分:0)
Doco说
您还可以创建现有Carbon实例的copy()。正如预期的那样,日期,时间和时区值都将复制到新实例。
widget._firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print('on message $message');
AudioCache player = new AudioCache();
const alarmAudioPath = "sounds/notification.mp3";
player.play(alarmAudioPath);
},
onResume: (Map<String, dynamic> message) async {
print('on resume $message');
},
onLaunch: (Map<String, dynamic> message) async {
print('on launch $message');
},
);