鑑於我UsersTableSeeder.php
類,我無慾無求我用假數據的數據庫,使用循環:Laravel碳不考慮時區DST
$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'),
]);
}
這裏的問題是,產生我的datetime值時,有它可能會落入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
現在我明白了,我不能在數據庫中放入這樣的值,因爲我的數據庫足夠聰明,可以知道這個時區並沒有完全退出。但是有沒有什麼辦法可以使碳足夠聰明地考慮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('Ymd H:i:s')'? – linktoahref
爲什麼你需要格式化日期字符串,它應該通過傳遞碳對象來工作,它將被使用的時區就是設置中的那個時區。 – jycr753