Carbon addWeeks()函数不起作用
Carbon addWeeks() function not working
我正在 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;
上面的输出是两个完全相同的日期,例如:
start time: 2015-07-01 00:00:00
end time: 2015-07-01 00:00:00
我参考了文档,可以在这里找到:http://carbon.nesbot.com/docs/#api-addsub。
有人知道我做错了什么吗?
$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",
}
我还没有使用 Carbon,但我想说那些 Carbon 对象是可变的。此外,大多数函数似乎 return $this
用于方法链接(又名 流畅的接口 )。
因此,在执行 $end = $start->addWeeks(3);
时,您的 $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);
碳日期 可变。试试这个:
$rand_date = Carbon::create(2015, rand(6,7), rand(1,30), 0);
echo "start time: " . $rand_date->format('Y-m-d');
echo "<br />";
echo "end time: " . $rand_date->addWeeks(3)->format('Y-m-d');
因为你没有在 carbon 解析方法中解析日期 ($start),
$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = Carbon::parse($start)->addWeeks(3);
我没有测试过你的代码,但希望它能工作。
我正在 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;
上面的输出是两个完全相同的日期,例如:
start time: 2015-07-01 00:00:00
end time: 2015-07-01 00:00:00
我参考了文档,可以在这里找到:http://carbon.nesbot.com/docs/#api-addsub。 有人知道我做错了什么吗?
$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",
}
我还没有使用 Carbon,但我想说那些 Carbon 对象是可变的。此外,大多数函数似乎 return $this
用于方法链接(又名 流畅的接口 )。
因此,在执行 $end = $start->addWeeks(3);
时,您的 $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);
碳日期 可变。试试这个:
$rand_date = Carbon::create(2015, rand(6,7), rand(1,30), 0);
echo "start time: " . $rand_date->format('Y-m-d');
echo "<br />";
echo "end time: " . $rand_date->addWeeks(3)->format('Y-m-d');
因为你没有在 carbon 解析方法中解析日期 ($start),
$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = Carbon::parse($start)->addWeeks(3);
我没有测试过你的代码,但希望它能工作。