Aufgrund meiner UsersTableSeeder.php
Klasse betrachtet, mit einer Schleife:Laravel Kohlenstoff, ich bin Impfen meine Datenbank mit gefälschten Daten nicht Zeitzone 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'),
]);
}
Das Problem hier ist, dass, wenn meine Datetime-Werte erzeugt werden, eine ist Chance, dass es in eine DST-Zone fallen könnte, wie zwischen 2017-03-12 02:00:00 und 2017-03-12 02:59:59 (was passiert) und es gibt mir den folgenden Fehler:
[PDOException]
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2016-03-13 02:08:11' for column 'created_at' at row 1
Jetzt verstehe ich, dass ich einen solchen Wert nicht in meine Datenbank eingeben kann, weil meine Datenbank intelligent genug ist, das zu wissen Diese Zeitzone verlässt nicht genau. Aber kann ich Carbon intelligent genug machen, um DST in Betracht zu ziehen? Ich will nicht manuell überprüfen, mit so etwas wie:
if ($my_date > 2017-03-12 02:00:00 && $my_date < 2017-03-12 02:59:59)
Haben Sie probiert 'Carbon :: jetzt ('Asia/Tokyo') -> addDays ((- 5 * $ i) - 2) -> Format ('Ymd H: i: s')'? – linktoahref
Warum müssen Sie die Datumszeichenkette formatieren, sie sollte nur funktionieren, indem Sie das Kohlenstoffobjekt übergeben, die Zeitzone, in der es verwendet wird, ist diejenige in den Einstellungen. – jycr753