1970-01-01 вставляется в базу данных, когда не выбрана дата

У меня есть текстовое поле, где дата вводится в php. Поскольку я хочу, чтобы дата была в определенном формате, я использую. date("dmY", strtotime()) для преобразования даты. Когда дата не указана или я не оставляю текстовое поле пустым, она войдет в базу данных по номеру 1970-01-01. Как я могу это решить? Вот мой код

  $d_date= clean($_POST['datum']); $newdate = date("Ymd", strtotime( $d_date)); 

Если значение $d_date равно null, оно войдет в базу данных в 1970-01-01.

Сделать поле в базе данных нулевым, а когда дата не отправлена ​​в форме, установите ее в NULL. Поведение mysql по умолчанию – установить значение даты по умолчанию, которое равно 1970-01-01 (unix epoch)

PHP strtotime() возвращает false при strtotime() . Это включает в себя, если параметр пустой, пустой. или любую другую неверно отформатированную строку.

Итак, strtotime(null) возвращает bool(false) .

Второй параметр для функции date() является целым числом, поэтому, когда вы вызываете date("Ymd", false) , false преобразуется в 0 , а date("Ymd", 0) возвращает дату эпохи.

Вот простой способ справиться с этим, прежде чем вставлять значение в базу данных:

 // Default to null $newdate=null; // Only proceed if strtotime() succeeds if($d_date=strtotime($_POST['datum'])) { // Since we have a valid time, turn to date string $newdate=date("Ymd", $d_date); } 

Затем просто разрешите NULL в столбце даты, чтобы можно было вставить нуль.

you can use this to check strtotime return false or true

 $from_date=strtotime($_POST["from"]); $from_date=($from_date ? date("Ymd", $from_date) : ''); $to_date=strtotime($_POST["to"]); $to_date=($to_date ? date("Ymd", $to_date) : '');