es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir el tiempo con zona horaria en PHP

Me gustaría convertir el valor/fecha/hora que obtuve de la devolución de llamada.
El valor crudo que obtuve es así:

$value = '2021-01-20T19:03:52.355+0300';

Necesito convertirlo a esto:

$value = '20-01-2021 23.03.52,355000 +07:00';

Lo que he hecho es utilizar algunas funciones de subcadena y concatenar, pero lamentablemente termina siendo una cadena y mi tipo de dato de la base de datos es timestamp, por lo que no puedo insertar el valor en la base de datos.

Leí algo sobre DateTime::createFromFormat y puedo convertir el formato de la hora, pero aún no tengo idea de cómo convertirlo a otra zona horaria.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para convertir el valor de fecha/hora al formato y zona horaria requeridos, puedes utilizar la clase DateTime y sus métodos.

    Primero, puedes usar el método createFromFormat() para crear un objeto DateTime a partir del valor sin procesar con el formato dado:

    $datetime = DateTime::createFromFormat('Y-m-d\TH:i:s.uO', $valor);
    

    Ten en cuenta que la cadena de formato debe coincidir con el formato del valor sin procesar, donde O representa el desplazamiento de la zona horaria en el formato ±HHMM.

    Una vez que tienes el objeto DateTime, puedes darle formato al valor y cambiar la zona horaria utilizando los métodos format() y setTimezone() respectivamente:

    $fecha_formateada = $datetime->format('d-m-Y H.i.s,u') . ' ' . $datetime->getTimezone()->getName();
    $fecha_convertida = $datetime->setTimezone(new DateTimeZone('Asia/Bangkok'))->format('d-m-Y H.i.s,u P');
    

    Aquí, $fecha_formateada es el valor de fecha/hora en el formato requerido con la zona horaria actual, y $fecha_convertida es el valor de fecha/hora convertido a la zona horaria ‘Asia/Bangkok’ con el formato requerido.

    Finalmente, puedes insertar el valor convertido en la base de datos utilizando una declaración preparada con la vinculación de parámetros para asegurar el tipo de datos y el formato adecuados:

    $stmt = $pdo->prepare('INSERT INTO tabla (columna_fechaHora) VALUES (:fechaHora)');
    $stmt->bindValue(':fechaHora', $fecha_convertida, PDO::PARAM_STR);
    $stmt->execute();
    

    Esto insertará el valor de fecha/hora convertido como un sello de tiempo en la columna_fechaHora de la tabla.

Comments are closed.