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?
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?
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';
}