Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Converter Datas!

Criei um input do tipo 'date' que recebe a data no formado dd/mm/yyyy. Uso uma mascara pelo jQuery que usa como separado '/'. No meu Banco de dados (MYSQL) o valor é armazenado num campo (data_inicio), do tipo varchar(255).

Não há problemas para armazenar essa data, PORÉM ao usar uma função PHP que faz um SELECT * FROM table ORDER BY data_inicio DESC, As datas são ordenadas baseando-se apenas nos primeiros dias que correspondem ao DIA.

Fica por exemplo Assim:

30/09/2017 02/10/2017 01/10/2017.

Como faço para Fazer com que ordene da forma correta?

Aceito Solução em SQL, PHP, jQuery... qualquer linguagem!

5 respostas

José, o certo mesmo seria vc gravar como data, porque vc ordena uma string é muito complicado.

Tente salvar no banco de dados em uma coluna do tipo DATETIME. Acredito que a ordenação será feita de forma mais correta pelo SQL.

Use a biblioteca DateTime do PHP para converter sua string para um Datetime válido antes:

DateTime::createFromFormat('d/m/Y', $suaData);

Abraços!

Fiz do jeito que o Tomás me sugeriu, e ainda não deu certo. Retorna um Recoverable fatal error dizendo q o Objeto da classe DateTime nao pode ser convertida em String.

Enta um desses. Lembrando que é date("d(dia).m(mês).y(ano", $suaVariavel) $today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm $today = date("m.d.y"); // 03.10.01 $today = date("j, n, Y"); // 10, 3, 2001 $today = date("Ymd"); // 20010310 $today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01 $today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day. $today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001 $today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month $today = date("H:i:s"); // 17:16:18 $today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (the MySQL DATETIME format)

solução!

Depois de Pesquisar Bastante, encontrei a Solução!

Basta usar uma função do PHP chamada SUBSTR.

Usando a data 20-10-2017 (varchar(255)) como exemplo.

SELECT * FROM basededados
   ORDER BY 
      SUBSTR( campoComAData, 7, 4), 
      SUBSTR( campoComAData, 4, 2),
      SUBSTR( campoComAData, 1, 2)

Dessa forma o comando pede ao SQL q ele leia os campos após leia a columa 'campoComAData' apartir da casa 7 (pois ele conta os '-'s). Ele vai ler a 7a, 8a, 9a e 10a (4 casas) e por esse pedaço da data o sql vai ordenar, após isso ele vai ler as casas correspondente ao mês e por fim o Dia!