sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo puedo insertar el tiempo real de un evento en la base de datos usando php mysqli?

En lugar de jugar con las zonas horarias, ¿por qué no hacerlo?

ALTER TABLE `your_table`
  CHANGE `date_added` `date_added`
  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

Esto cambiará su columna de una columna DATE a una columna TIMESTAMP , convirtiendo todas las fechas a sus respectivas marcas de tiempo UTC en el proceso.

Cuando se inserta una nueva fila, utilizará la marca de tiempo actual como un valor . Las marcas de tiempo siempre están en UTC, por lo que no tiene que cambiar la zona horaria en su servidor MySql ni proporcionar la fecha al insertar una nueva fila.

Si no puede o no quiere cambiar sus columnas, también puede simplemente seleccionar la marca de tiempo a través de

SELECT UNIX_TIMESTAMP('date_added') FROM your_table;

Para su TimeAgo, puede simplemente hacer

$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);

Cuando proporciona una marca de tiempo a DateTime, siempre usará UTC independientemente de la zona horaria predeterminada de su servidor. En consecuencia, debe convertir $dateAdded a la zona horaria predeterminada (como se muestra arriba) o convertir $timeSinceAdded a UTC.

Para cambiar la fecha y hora a la zona horaria del usuario que está visitando actualmente, usted

En cualquier caso, simplemente cambia ambos DateTimes a esa zona horaria. Esto se hace fácilmente a través de setTimezone() .

El $timeSinceAdded será entonces un DateInterval objeto, que puedes usar así

echo $timeSinceAdded->format('%a total days');

Consulte los enlaces para obtener más detalles, por ejemplo, sobre los modificadores de formato disponibles.