Qual é a melhor maneira de calcular o número total de segundos entre duas datas? Até agora, tentei algo como:
$delta = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
No entanto, a days
propriedade do objeto DateInterval parece estar quebrada na compilação PHP5.3 atual (pelo menos no Windows, ele sempre retorna o mesmo 6015
valor). Também tentei fazer isso de uma forma que não preservasse o número de dias em cada mês (arredondados para 30), anos bissextos, etc:
$seconds = ($delta->s)
+ ($delta->i * 60)
+ ($delta->h * 60 * 60)
+ ($delta->d * 60 * 60 * 24)
+ ($delta->m * 60 * 60 * 24 * 30)
+ ($delta->y * 60 * 60 * 24 * 365);
Mas eu realmente não estou feliz em usar essa solução meia-boca.
$delta->format("%r%s")
?format
é quando dizer que o número de segundos é 0 enquanto o número de minutos é 1,$delta->format("%r%s")
acaba sendo 0 :(Respostas:
Você não poderia comparar os carimbos de hora em vez disso?
fonte
getTimestamp()
método está disponível em PHP> = 5.3.0.format('U')
vez degetTimestamp()
.Esta função permite que você obtenha a duração total em segundos de um objeto DateInterval
fonte
$endTime
e$reference
entre si, já que isso me dá um resultado negativo com um valor de data e hora de intervalo futuro.Você poderia fazer assim:
time () retorna a hora atual em segundos desde a época (1970-01-01T00: 00: 00), e strtotime faz o mesmo, mas com base em uma data / hora específica fornecida.
fonte
fonte
É sempre bom quando o que você precisa já está presente como uma classe. No seu caso, você precisa de um número total de segundos. Por que não fazer disso uma aula? O código pode ser assim:
Além de ser intuitivo, você também pode se beneficiar do recurso de preenchimento automático de seu IDE.
Para uma implementação mais útil, você pode verificar esta biblioteca .
fonte
Você poderia simplesmente inserir os números fixos (em vez de 60 * 60 - colocar 3600) para que não seja necessário calculá-los a cada vez.
Editar - corrigiu o número com base em seu comentário.
fonte