¿Cuál es la mejor manera de calcular el número total de segundos entre dos fechas? Hasta ahora, he intentado algo como:
$delta = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
Sin embargo, la days
propiedad del objeto DateInterval parece estar rota en la compilación actual de PHP5.3 (al menos en Windows, siempre devuelve el mismo 6015
valor). También intenté hacerlo de una manera que no pudiera conservar el número de días de cada mes (se redondea a 30), años bisiestos, 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);
Pero realmente no estoy contento con usar esta solución a medias.
$delta->format("%r%s")
?format
es cuando dicen que la cantidad de segundos es 0 mientras que la cantidad de minutos es 1,$delta->format("%r%s")
resulta ser 0 :(Respuestas:
¿No podría comparar las marcas de tiempo ?
fuente
getTimestamp()
método está disponible en PHP> = 5.3.0.format('U')
lugar degetTimestamp()
.Esta función le permite obtener la duración total en segundos de un objeto DateInterval
fuente
$endTime
y$reference
entre sí, ya que esto me da un resultado negativo con un valor de fecha y hora de intervalo futuro.Podrías hacerlo así:
time () devuelve el tiempo actual en segundos desde el tiempo de época (1970-01-01T00: 00: 00), y strtotime hace lo mismo, pero basado en una fecha / hora específica que usted proporcione.
fuente
fuente
Siempre se siente bien cuando lo que necesitas ya está presente como clase. En su caso, necesita un número total de segundos. ¿Por qué no hacer una clase con eso? El código podría verse así:
Además de ser intuitivo, también puede beneficiarse de la función de autocompletado de su IDE.
Para una implementación más útil, puede consultar esta biblioteca .
fuente
Podrías simplemente poner los números duros (en lugar de 60 * 60 - poner 3600) para que no sea necesario calcularlos cada vez.
Editar: se corrigió el número según su comentario.
fuente