Jump to content

Convert format date with function and foreach


m90mine

Recommended Posts

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 by m90mine
Link to comment
Share on other sites

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.

  • Vote 1
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

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');
//...

 

  • Vote 1

Feito é melhor que perfeito

Link to comment
Share on other sites

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

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 by m90mine
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.