Как не отображать значение вместо 01 января 1970 года при подтягивании даты

#php #codeigniter

#php #codeigniter

Вопрос:

Получил код из старой системы, но я не могу изменить его, чтобы он НЕ отображал срок действия, когда дата равна нулю или 0000-00-00 из базы данных. Вот код.

Я попробовал функцию IF в $ expiry_date, но получил белый экран

   function select_expiry_dates($set_select_name='expiry_date', $set_default_code='', $set_default_expiry_date='')
  {
    $ci =amp; get_instance();

    $ci->load->model('Expiry_dates_model');

    $expiry_dates = $ci->Expiry_dates_model->get_expiry_dates();

    if($expiry_dates->num_rows() > 0)
    {
      foreach ($expiry_dates->result() as $row)
      {
        $expiry_date        = $row->code .' ('. date('d M Y', strtotime($row->expiry_date)) .')';
        $default_value      = ($row->code == $set_default_code amp;amp; $row->expiry_date == $set_default_expiry_date) ? TRUE : '';
        $set_select_option  = set_select($set_select_name, $expiry_date, $default_value);

        echo '<option value="'. $expiry_date .'" data-expiry="'. $expiry_date .'" data-expiry-rate="'. $row->rate .'" '. $set_select_option .'>'. $expiry_date .'</option>';
      }
    }

    return TRUE;
  }
  

Мне нужна дата истечения срока действия ($expiry_dates), чтобы при выборе из базы данных не отображалось НИ истечения срока действия, ни даты. В настоящее время он отображается как 01 января 1970 года, даже если данные в базе данных равны нулю.

Комментарии:

1. «Я попробовал функцию IF в $ expiry_date, но получил белый экран», что означает, что вы допустили простую синтаксическую ошибку. Попробуйте еще раз и найдите ошибки.

Ответ №1:

Пожалуйста, проверьте перед отображением, является ли этот формат даты допустимым или нет.

Вот код для проверки:

 function validateDate($date, $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    // The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.
    return $d amp;amp; $d->format($format) === $date;
}
  

Результаты:

 var_dump(validateDate('2018-15-01'));  // false
var_dump(validateDate('20184-16-01')); // false
var_dump(validateDate('2018-22-04'));  // true
  

Надеюсь, это решит вашу проблему

Ответ №2:

Попробуйте это

 if($expiry_dates->num_rows() > 0)
{
  foreach ($expiry_dates->result() as $row)
  {
    if(is_null($row->expiry_date)){
        $date = 'No Date';
    }else{
         $date = $row->expiry_date;
    }
    //Use $date in the code...
  }
}