4

我正在用 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 。有人知道我在做什么错吗?

4

4 回答 4

8

我还没有与 Carbon 合作过,但我想说那些 Carbon 对象是可变的。此外,大多数函数似乎都返回$this了方法链接(又名fluent interface)。

因此,当做$end = $start->addWeeks(3);your$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);
于 2015-09-15T14:56:24.103 回答
1

碳日期可变的。尝试这个:

$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');
于 2019-10-30T12:57:26.327 回答
0

因为您没有在碳解析方法中解析日期($start),

$start = Carbon::create(2015, rand(6,7), rand(1,30), 0);
$end = Carbon::parse($start)->addWeeks(3);

我没有测试你的代码,但希望它可以工作。

于 2021-05-31T17:08:13.580 回答
0

$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",
   }
于 2015-09-15T14:50:58.270 回答