Laravel Carbon 不考虑时区 DST

Ant*_*ine 6 php timezone laravel

鉴于我的UsersTableSeeder.php课程,我正在使用循环为我的数据库植入假数据:

$numberOfUsers = 150;

DB::table('users')->delete();

$faker = Faker::create();

for ($i = 1; $i <= $numberOfUsers; $i++) {
    DB::table('users')->insert([
        'id' => $i,
        'firstName' => $faker->firstName,
        'lastName' => $faker->lastName,
        'email' => $faker->email,
        'password' => bcrypt("123"),
        'created_at' => Carbon::now()->addDays((-5 * $i) - 2)->format('Y-m-d H:i:s'),
        'updated_at' => Carbon::now()->addDays(-5 * $i)->format('Y-m-d H:i:s'),
    ]);
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是,当我的日期时间值生成时,它有可能落在 DST 区域中,例如在 2017-03-12 02:00:00 和 2017-03-12 02:59:59 之间(确实发生),它给了我以下错误:

[PDOException]
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2016-03-13 02:08:11' for column 'created_at' at row 1
Run Code Online (Sandbox Code Playgroud)

现在我明白我不能把这样的值放在我的数据库中,因为我的数据库足够聪明,知道这个时间区域并没有完全退出。但是有什么办法可以让 Carbon 足够聪明以考虑 DST 吗?我不想用以下内容手动检查它:

if ($my_date > 2017-03-12 02:00:00 && $my_date < 2017-03-12 02:59:59)
Run Code Online (Sandbox Code Playgroud)

Sco*_*pey 2

您可以使用 Carbon 生成时间戳并提供时区。尝试一下:

Carbon::now()->format('c')
Run Code Online (Sandbox Code Playgroud)