Se eu tiver uma string PHP no formato AAAA-DD-MM e um carimbo de data/hora no MySQL, existe uma boa maneira de converter entre eles?

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

Pergunta

Estou interessado em fazer comparações entre a string de data e o carimbo de data/hora do MySQL.No entanto, não estou vendo uma conversão fácil.Estou negligenciando algo óbvio?

Foi útil?

Solução

Convertendo de carimbo de data/hora para formato:

date('Y-m-d', $timestamp);

Convertendo de formatado para carimbo de data/hora:

mktime(0, 0, 0, $month, $day, $year, $is_dst);

Ver data e mktime para documentação adicional.

Quando se trata de armazenamento, cabe a você usar o formato MySQL DATE para stroing como uma data formatada;como um número inteiro para armazenamento como carimbo de data/hora UNIX;ou você pode usar o formato TIMESTAMP do MySQL, que converte um carimbo de data/hora numérico em um formato legível. Verifique o documento MySQL para informações de TIMESTAMP.

Outras dicas

Você pode evitar ter que usar strtotime() ou getdate() em PHP usando o MySQL UNIX_TIMESTAMP() função.

SELECT UNIX_TIMESTAMP(timestamp) FROM sometable

Os dados resultantes serão um timestamp Unix inteiro padrão, então você pode fazer uma comparação direta com time().

Escrevi esta pequena função para simplificar o processo:

/**
 * Convert MySQL datetime to PHP time
 */
function convert_datetime($datetime) {
  //example: 2008-02-07 12:19:32
  $values = split(" ", $datetime);

  $dates = split("-", $values[0]);
  $times = split(":", $values[1]);

  $newdate = mktime($times[0], $times[1], $times[2], $dates[1], $dates[2], $dates[0]);

  return $newdate;
}

Eu espero que isso ajude

strtotime() e obterdata() são duas funções que podem ser usadas para obter datas de strings e carimbos de data/hora.Porém, não existe uma função de biblioteca padrão que converta entre carimbos de data/hora MySQL e PHP.

Utilize o PHP Data função.Talvez você precise converter o carimbo de data/hora do mysql em um carimbo de data/hora do Unix em sua consulta usando o comando UNIX_TIMESTAMP função no mysql.

Uma string de data no formato:

YYYY-MM-DD

não tem tempo associado a ele.Um carimbo de data/hora do MySQL tem o formato:

YYYY-MM-DD HH:mm:ss

para comparar os dois, você terá que adicionar uma hora à sequência de data, como meia-noite, por exemplo

$datetime = '2008-08-21'.' 00:00:00';

e então use uma função para comparar o tempo epoc entre eles

if (strtotime($datetime) > strtotime($timestamp)) {
    echo 'Datetime later';
} else {
    echo 'Timestamp equal or greater';
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top