【发布时间】:2017-09-15 01:33:44
【问题描述】:
鉴于我的 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'),
]);
}
这里的问题是,当我的日期时间值生成时,它可能会落在 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
现在我知道我不能在我的数据库中放入这样的值,因为我的数据库足够聪明,可以知道这个时间区域并没有完全退出。但是有什么方法可以让 Carbon 足够聪明地考虑 DST 吗?我不想手动检查它:
if ($my_date > 2017-03-12 02:00:00 && $my_date < 2017-03-12 02:59:59)
【问题讨论】:
-
你试过
Carbon::now('Asia/Tokyo')->addDays((-5 * $i) - 2)->format('Y-m-d H:i:s')吗? -
为什么需要格式化日期字符串,它应该通过传递碳对象来工作,它将使用的时区是设置中的一个。