Redondear fecha y hora a la última hora

2 minutos de lectura

avatar de usuario de plexcell
plexcell

Traté de buscar esto, pero no pude encontrar un buen ejemplo de lo que estoy tratando de hacer.

Obtuve valores de fecha y hora en la base de datos MySQL que deben redondearse cuando ese valor está en uso.

Ejemplo, todos estos valores:

2013-04-20 07:14:42
2013-04-20 07:19:51
2013-04-20 07:37:26
2013-04-20 07:46:28
2013-04-20 07:59:44

Debe redondearse a:

2013-04-20 07:00:00

Y

2013-04-20 16:25:34

debiera ser:

2013-04-20 16:00:00 etc…

Código PHP que obtiene el valor de la fecha:

$d = strtotime($row["date"]);

Entonces, ¿cómo es posible redondear el valor de fecha y hora?

  • ¿Las fechas y horas son UTC?

    – oxígeno

    20 de abril de 2013 a las 9:11

  • ¿Qué pasa con los microsegundos?

    – Yevgeniy Afanasyev

    21 de marzo de 2018 a las 3:21

  • Función para redondear arbitrariamente PHP DateTimes: stackoverflow.com/a/57399274/339440

    – Esteban R.

    8 de agosto de 2019 a las 0:12

Avatar de usuario de Rikesh
Rikesh

Prueba esto,

$date = "2013-04-20 16:25:34"; 
echo date("Y-m-d H:00:00",strtotime($date));

Demostración de CodePad.

  • Gracias 🙂 Lo tengo funcionando con esto: $d = strtotime(date(“Ymd H:00:00”,strtotime($row[“date”])));

    – plexcell

    20 de abril de 2013 a las 9:24

Si está utilizando la biblioteca Carbon DateTime de PHP (que realmente debería – https://github.com/briannesbitt/Carbono )

Puedes lograrlo fácilmente usando

Carbon::now()->minute(0)->second(0);

  • ¿Qué pasa con los microsegundos?

    – Yevgeniy Afanasyev

    21 de marzo de 2018 a las 3:20

  • Verifique mi respuesta como uso startOfHour();

    – ml59

    24 de diciembre de 2021 a las 14:13


Como ya tienes una marca de tiempo de Unix $dla forma más eficiente es usar solo aritmética en lugar de funciones de fecha, especialmente si va a recorrer un conjunto de resultados.

$hourTimestamp = $d - ($d % 3600);

El operador Modulo le da el resto que resta de la marca de tiempo para obtener la marca de tiempo de la hora.

  • Las fechas de PHP consideran las zonas horarias, mientras que las marcas de tiempo de Unix siempre están en UTC, por lo que esto no dará el resultado esperado para zonas horarias como India (UTC+5½) o Irán (UTC+3½).

    – Gamificación

    6 de julio de 2020 a las 5:38

En ese caso un simple substr podría hacer:

echo substr($date, 0, 13) . ":00:00";

En referencia a la respuesta de @Dayson, esta es una mejor manera de redondear la fecha y hora a la última hora con Carbon

$dt = Carbon::create(2012, 1, 31, 15, 32, 45);
echo $dt->startOfHour();  // 2012-01-31 15:00:00

comprobar el modificador sección en Carbono Doc

Avatar de usuario de Steve
Steve

Para aquellos que siguen (¡mucho más tarde!): Carbon tiene una manera fácil de hacer esto

$date = (new Carbon($row['date']))->minute(0)->second(0)->getTimestamp();

Avatar de usuario de Fabio
fabio

puedes usar
date y strtotime función función para lograr esto, simplemente ya cambie sus minutos y segundos según

    $date="2013-04-20 07:14:42";
    $newdate = date('Y-m-d H:00:00', strtotime($date));

    echo $newdate;

esto dará salida

2013-04-20 07:00:00

¿Ha sido útil esta solución?