Conseguir um objeto PHP DateTime em uma representação em cadeia de uma data MYSQL

StackOverflow https://stackoverflow.com/questions/396610

  •  29-08-2019
  •  | 
  •  

Pergunta

Eu tenho um DateTime que eu quero para armazenar em uma coluna Data MySQL. Eu estou usando MySQLi e declarações preparadas.

Quando os parâmetros de ligação, não posso especificar a data como um tipo, apenas strings e inteiros.

Como faço para converter o DateTime para uma representação de cadeia data MySQL? Há muito pouca documentação sobre a classe DateTime.

Foi útil?

Solução

Eu quase fechado esta como uma duplicata de do MySQL data e hora para outro formato com PHP , mas eu acho que é realmente o problema inverso. Que pergunta como formatar uma data obtido a partir do MySQL, e você está perguntando como formatar uma data para a entrada para uma consulta.

Opção 1:

SELECT * FROM MyTable WHERE DateTimeCol = ?

Você pode formatar o valor para o formato YYYY-MM-DD HH:MM MySQL quer:

<?php $mysql_date = date('Y-m-d H:i:s', $timestamp); ?>

Em seguida, enviá-lo como um parâmetro de cadeia de consulta.

Opção 2:

SELECT * FROM MyTable WHERE DateTimeCol = FROM_UNIXTIME(?)

Em seguida, você pode enviar o valor timestamp como um parâmetro numérico para a consulta.

Opção 3:

SELECT * FROM MyTable WHERE DateTimeCol = STR_TO_DATE(?, '%m/%d/%y')

Você pode enviar uma ampla variedade de representações de seqüência de data / hora, se você especificar a formatação a MySQL de STR_TO_DATE() função. Para os códigos de formatação, consulte o DATE_FORMAT() função.

Outras dicas

Porque o DateTime classe introduzida com PHP5 está mal documentada, eu não recomendo usá-lo. Acho timestamps regulares para ser muito mais fácil trabalhar com!

Mas se você ainda quiser usar DateTime-objetos, uma solução seria a de transformar os objetos em (unix) timestamps antes de armazená-los em seu banco de dados. Transformar as marcas de tempo voltar para DateTime os objetos depois de ler informações do seu banco de dados.

Para criar DateTime-objeto de um timestamp, use date_create () com o timestamp como argumento. Para obter seus objetos representação do número de segundos desde o Unix Epoch, use date_format ($ object, 'U') (maiúsculas U).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top