У меня есть текстовое поле, где дата вводится в 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) : '');