m90mine Posted July 18, 2022 at 08:56 AM Report Share #626478 Posted July 18, 2022 at 08:56 AM (edited) Tenho 2 duas funções que convertem datas de um formulário, que estão a funcionar perfeitamente convertem bem. // converter campo v_reg_exp_date do formulário para a BD no formato Y-m-d private function date_to_db($date){ $dateTime = DateTime::createFromFormat('d-m-Y', $date); $db_date = date_format($dateTime,"Y-m-d"); return $db_date; } // converter campo v_reg_exp_date da BD para formulário em formato d-m-Y private function db_to_date($date){ $dateTime = DateTime::createFromFormat('Y-m-d', $date); $db_date = date_format($dateTime,"d-m-Y"); return $db_date; } Depois tenho uma função que mostra os meus dados numa tabela que vêm da BD mas não estou a conseguir mostrar a data no formato que estou a converter: // função que apresenta os dados do veículo public function getall_vehicle() { $this->db->select("*"); $this->db->from('vehicles'); $this->db->join('vehicle_group','vehicle_group.gr_id=vehicles.v_group','LEFT'); $this->db->order_by('v_id','desc'); $query = $this->db->get(); $vehicles = $query->result_array(); foreach ($vehicles as $row) { $row['v_reg_exp_date'] = $this->db_to_date($row['v_reg_exp_date']); } // print_r($row['v_reg_exp_date']); // exit; return $vehicles; } Apresenta-me sempre a data em 2022-07-14 e não o inverso. Alguém poderia dar uma dica de onde estará o erro? Edited July 18, 2022 at 08:56 AM by m90mine Link to comment Share on other sites More sharing options...
M6 Posted July 18, 2022 at 09:15 AM Report Share #626481 Posted July 18, 2022 at 09:15 AM A data em si e o seu formato de visualização são coisas distintas. As datas são guardadas num formato interno, não são guardadas no formato em que são escritas ou obtidas. A sua visualização depende da parametrização da base de dados e/ou da connection string. Se queres obter a data num determinado formato usa a função de formatação/conversão de datas da base de dados. No entanto, isso pode devolver-te um char/varchar e não um date/datetime. 1 Report 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Ivo Vicente Posted July 18, 2022 at 09:45 PM Report Share #626499 Posted July 18, 2022 at 09:45 PM Estava a ver o código, e chamou-me a atenção estares a criar o objeto com recurso ao DateTime (OOP/POO) mas depois para converter estás a usar o método date_format que é um método procedimental. Podes sempre alterar para <?php // ... $dateTime = DateTime::createFromFormat('Y-m-d', $date); return $dateTime->format("d-m-Y"); } Outra opção, pode ser o formato que estás a enviar vindo da BD como refere o @M6 não estar 100% de acordo com o formato esperado, tens a opção de deixar o PHP inferir o formato e depois aplicar o formato pretendido <?php //... https://www.php.net/manual/en/datetime.format.php $date = new DateTime($dateFromRow); return $date->format('d-m-Y'); //... 1 Report Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
m90mine Posted July 19, 2022 at 11:51 AM Author Report Share #626502 Posted July 19, 2022 at 11:51 AM Em 18/07/2022 às 10:15, M6 disse: A data em si e o seu formato de visualização são coisas distintas. As datas são guardadas num formato interno, não são guardadas no formato em que são escritas ou obtidas. A sua visualização depende da parametrização da base de dados e/ou da connection string. Se queres obter a data num determinado formato usa a função de formatação/conversão de datas da base de dados. No entanto, isso pode devolver-te um char/varchar e não um date/datetime. Tens razão, no entanto como posso controlar a view da data? Eu estou a controlar isso pelo model, sugeres de outra forma? 14 horas atrás, Ivo Vicente disse: Estava a ver o código, e chamou-me a atenção estares a criar o objeto com recurso ao DateTime (OOP/POO) mas depois para converter estás a usar o método date_format que é um método procedimental. Podes sempre alterar para <?php // ... $dateTime = DateTime::createFromFormat('Y-m-d', $date); return $dateTime->format("d-m-Y"); } Outra opção, pode ser o formato que estás a enviar vindo da BD como refere o @M6 não estar 100% de acordo com o formato esperado, tens a opção de deixar o PHP inferir o formato e depois aplicar o formato pretendido <?php //... https://www.php.net/manual/en/datetime.format.php $date = new DateTime($dateFromRow); return $date->format('d-m-Y'); //... estava a ver a coisa de forma diferente... ás vezes a forma como vemos complica mais do que ajuda, obrigado Link to comment Share on other sites More sharing options...
m90mine Posted July 19, 2022 at 11:54 AM Author Report Share #626503 Posted July 19, 2022 at 11:54 AM (edited) neste caso na view dos veiculos estou a usar esta função para inverter a data, sugeres fazer de forma diferente? // função que apresenta os dados do veículo public function getall_vehicle() { $this->db->select("*"); $this->db->from('vehicles'); $this->db->join('vehicle_group','vehicle_group.gr_id=vehicles.v_group','LEFT'); $this->db->order_by('v_id','desc'); $query = $this->db->get(); $vehicles = $query->result_array(); foreach ($vehicles as $row) { $row['v_reg_exp_date'] = $this->db_to_date($row['v_reg_exp_date']); } // print_r($row['v_reg_exp_date']); // exit; return $vehicles; } Edited July 19, 2022 at 11:56 AM by m90mine Link to comment Share on other sites More sharing options...
Ivo Vicente Posted July 20, 2022 at 09:45 PM Report Share #626523 Posted July 20, 2022 at 09:45 PM Em programação existem muitos modo de matar moscas, em relação a datas sem entrar em livrarias que fazem isso muito bem, podes começar por usar uma classe de apoio com métodos estáticos para tratar dessa parte. Assim ainda tudo hard-coded, que podes sempre melhorar. <?php // Ficheiro Helpers\DateHelper.php class DateHelper{ public static function fromDBToDate($dateValue){ $date = new DateTime($dateValue); return $date->format('d-m-Y'); } } // No ficheiro do controlador/view // Se não estiveres a usar autoload tens que fazer o include/require include_once __DIR__"...PATH.../Helpers/DateHelper" echo DateHelper::fromDBToDate($dateValue); Assim libertas o modelo para apenas ser uma representação da entidade, e adaptas/convertes os dados no controlador ou na view. Espero ter ajudado Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now