0

在 Laravel Seeder 中,我试图获取一个Faker生成的日期,将其转换为 Carbon,然后获取两个相隔仅几个小时的日期来表示一个 4 小时的会话。例如, Start Date: 03/13/2016 12:00PM
End Date: 03/13/2016 5:00PM

下面是我登陆的内容,但是 the$start$endvariable总是相同的。

            for ($k = 0; $k < $jobAssignmentCount; $k++) {
                $randomDate = $faker->dateTimeBetween($job->starts_at, '+6 months');
                $dateTime = Carbon::instance($randomDate)->minute(0)->second(0);
                $start = $dateTime;
                $end = $dateTime;
                $end->addHours(4);
                $jobAssignment = JobAssignment::create([
                    'job_id' => $job->id,
                    'starts_at' => $start,
                    'ends_at' => $end,
                    'assignment_notes' => 'Assignment Notes',
                    'is_cancelled' => $faker->boolean(10),
                    'cancelled_at' => $faker->dateTimeBetween('+6 months', '+1 year'),
                    'cancelled_by_profile_id' => $profile->id,
                    'is_billable' => $faker->boolean(75),
                ]);
            }
4

3 回答 3

1

尝试这样做:$end = $end->addHours(4);或先克隆它。

于 2016-03-13T16:34:45.310 回答
1

我认为这是因为 $start 和 $end 都引用了同一个 Carbon 对象。尝试创建两个不同的 $dateTime 对象 - $startDateTime 和 $endDateTime - 相隔几个小时,并将它们分别引用到 $start 和 $end。

于 2016-03-13T16:49:32.360 回答
0

您将$start和分配$end给同一个对象,$dateTime. 因为它们都是同一个对象,所以当你改变一个时,另一个也会改变。最简单的事情是克隆对象,然后addHours()克隆:

$start = Carbon::instance($randomDate)->minute(0)->second(0);
$end = clone $start;
$end->addHours(4);

现在您应该有两个不同的对象, a$start和 an $end,时间相隔 4 小时。

于 2016-03-13T17:11:42.153 回答