santiago - Establecer zona horaria en PHP y MySQL
timezone america buenos aires (6)
El mejor método Establecer zona horaria en PDO MySQL:
new PDO(''mysql:host=localhost;dbname=nametable'', ''username'', ''password'', [PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = ''Europe/Rome''"]);
Estoy haciendo una aplicación donde necesito almacenar la fecha en MySQL usando la función PHP date()
.
<?php $finalize_at = date(''Y-m-d H:i:s''); ?>
Estas fechas deben compararse en MySQL utilizando la función NOW()
para devolver la diferencia en horas, por ejemplo:
SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;
Pero el problema es que la fecha de la función de date(''Ymd H:i:s'')
PHP date(''Ymd H:i:s'')
usa la configuración de la zona horaria de PHP, y la función NOW()
toma el timezome de MySQL del servidor MySQL.
Estoy tratando de resolver al hacer esto:
-
date_default_timezone_set(''Europe/Paris'');
Funciona solo para PHP. -
date.timezone= "Europe/Paris";
Funciona solo para PHP. -
SELECT CONVERT_TZ(now(), ''GMT'', ''MET'');
Esta vuelta vacía -
mysql> SET time_zone = ''Europe/Paris'';
Esto arroja un error desde la consola de MySQL.
Y la zona horaria no cambia para MySQL.
¿Hay alguna manera de cambiar la zona horaria para PHP y MySQL sin tener que hacerlo desde la consola MySQL, o configurar un cambio de zona horaria desde algún lugar en php.ini
y hacer que estos valores estén disponibles tanto para PHP como para MySQL?
Mucho aprecio tu apoyo.
El mejor método Establecer zona horaria en PDO MySQL:
Si corresponde, ya sea por error, puede usar: fecha (''P'') Ejemplo:
new PDO(''mysql:host=localhost;dbname=nametable'',
''username'',
''password'',
[PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = ''".date(''P'')."''"]);
En PHP:
<?php
define(''TIMEZONE'', ''Europe/Paris'');
date_default_timezone_set(TIMEZONE);
Para MySQL:
<?php
$now = new DateTime();
$mins = $now->getOffset() / 60;
$sgn = ($mins < 0 ? -1 : 1);
$mins = abs($mins);
$hrs = floor($mins / 60);
$mins -= $hrs * 60;
$offset = sprintf(''%+d:%02d'', $hrs*$sgn, $mins);
//Your DB Connection - sample
$db = new PDO(''mysql:host=localhost;dbname=test'', ''dbuser'', ''dbpassword'');
$db->exec("SET time_zone=''$offset'';");
Las zonas horarias PHP y MySQL ahora están sincronizadas dentro de su aplicación. ¡No es necesario ir a la consola php.ini
o MySQL!
Esto es de este artículo en SitePoint .
Para PHP use esta función:
date_default_timezone_set()
MySQL:
default-time-zone=''timezone''
Si tiene el privilegio de root , puede establecer el valor de la zona horaria del servidor global en tiempo de ejecución con esta instrucción:
SET GLOBAL time_zone = timezone;
Zonas horarias por conexión. Cada cliente que se conecta tiene su propia configuración de zona horaria, dada por la sesión time_zone variable
. Inicialmente, la variable de sesión toma su valor de la variable global time_zone
, pero el cliente puede cambiar su propia zona horaria con esta declaración:
SET time_zone = timezone;
Puedes hacerlo fácilmente solo con las siguientes dos líneas de PHP.
$tz = (new DateTime(''now'', new DateTimeZone(''Asia/Kabul'')))->format(''P'');
$pdo->exec("SET time_zone=''$tz'';");
Puedo cambiar mi zona horaria predeterminada mysql de la sección variable editando la fila que dice "zona horaria" en phpmyadmin.
Aquí también puede cambiar el formato y mucho más que puede encontrar en mysql support http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html , espero que lo ayude.
Puede poner la misma zona horaria para php y mysql.