在 PHP 和 MySQL 中设置时区
Set timezone in PHP and MySQL
我正在制作一个应用程序,我需要使用 PHP date()
函数将日期存储在 MySQL 中。
<?php $finalize_at = date('Y-m-d H:i:s'); ?>
这些日期需要在 MySQL 中使用 NOW()
函数与 return 小时差进行比较,例如:
SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;
但问题是 – PHP 日期函数 date('Y-m-d H:i:s')
使用 PHP 时区设置,而 NOW()
函数使用 MySQL 时区MySQL 服务器。
我正在努力解决这个问题:
date_default_timezone_set('Europe/Paris');
仅适用于 PHP.
date.timezone= "Europe/Paris";
仅适用于 PHP.
SELECT CONVERT_TZ(now(), 'GMT', 'MET');
这个return空。
mysql> SET time_zone = 'Europe/Paris';
这从 MySQL 的控制台抛出错误。
MySQL 时区不变。
有什么方法可以更改 PHP 和 MySQL 的时区,而不必从 MySQL 控制台进行,或者从 [=] 中的某处设置时区更改22=] 并使这些值可用于 PHP 和 MySQL.
非常感谢您的支持。
在PHP中:
<?php
define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);
对于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';");
PHP 和 MySQL 时区现已在您的应用程序中同步。无需使用 php.ini
或 MySQL 控制台!
这是来自article on SitePoint.
对于 PHP 使用此函数:
date_default_timezone_set()
MySQL:
default-time-zone='timezone'
如果您拥有 root 权限,您可以使用以下语句将全球服务器时区值设置为 运行-时间:
SET GLOBAL time_zone = timezone;
每个连接时区。每个连接的客户端都有自己的时区设置,由会话 time_zone variable
指定。最初,会话变量从 global time_zone
变量中获取其值,但客户端可以使用以下语句更改其自己的时区:
SET time_zone = timezone;
我可以通过编辑 phpmyadmin 中显示 "time zone" 的行,从可变部分更改我的 mysql 默认时区。
在这里您还可以更改格式,您可以在 mysql 支持 http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html 中找到更多内容,希望对您有所帮助。
您可以为 php 和 mysql 设置相同的时区。
下面两行PHP.
就可以轻松搞定
$tz = (new DateTime('now', new DateTimeZone('Asia/Kabul')))->format('P');
$pdo->exec("SET time_zone='$tz';");
最好的方法在PDO中设置时区MySQL:
new PDO('mysql:host=localhost;dbname=nametable',
'username',
'password',
[PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = 'Europe/Rome'"]);
最好的方法在PDO中设置时区MySQL:
如果合适,是否错误你可以使用:date('P')
示例:
new PDO('mysql:host=localhost;dbname=nametable',
'username',
'password',
[PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = '".date('P')."'"]);
感谢其他答案,我找到了最适合我的解决方案,只需几行代码,无需修改任何服务器配置文件。
1) 在 PHP 中设置所需的时区:
date_default_timezone_set('Europe/Rome');
2)建立PDO连接到MySql:
$MySqlConnection = new PDO("mysql:host=myHost;dbname=MyDb;charset=myCharset", $myUser, $myPwd);
3)在PDO资源中设置相同的时区:
$MySqlConnection->exec("SET TIME_ZONE = '".date('P')."';");
由于MySQL可能无法识别时区名称Europe/Rome
,请使用date('P')
以+/-HH:mm
格式传递它。
请务必注意,此方法允许您管理从夏令时到冬令时的转换,反之亦然,而无需更改代码。
我正在制作一个应用程序,我需要使用 PHP date()
函数将日期存储在 MySQL 中。
<?php $finalize_at = date('Y-m-d H:i:s'); ?>
这些日期需要在 MySQL 中使用 NOW()
函数与 return 小时差进行比较,例如:
SELECT TIMESTAMPDIFF( hour, NOW(), finalize_at ) FROM plans;
但问题是 – PHP 日期函数 date('Y-m-d H:i:s')
使用 PHP 时区设置,而 NOW()
函数使用 MySQL 时区MySQL 服务器。
我正在努力解决这个问题:
date_default_timezone_set('Europe/Paris');
仅适用于 PHP.date.timezone= "Europe/Paris";
仅适用于 PHP.SELECT CONVERT_TZ(now(), 'GMT', 'MET');
这个return空。mysql> SET time_zone = 'Europe/Paris';
这从 MySQL 的控制台抛出错误。
MySQL 时区不变。
有什么方法可以更改 PHP 和 MySQL 的时区,而不必从 MySQL 控制台进行,或者从 [=] 中的某处设置时区更改22=] 并使这些值可用于 PHP 和 MySQL.
非常感谢您的支持。
在PHP中:
<?php
define('TIMEZONE', 'Europe/Paris');
date_default_timezone_set(TIMEZONE);
对于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';");
PHP 和 MySQL 时区现已在您的应用程序中同步。无需使用 php.ini
或 MySQL 控制台!
这是来自article on SitePoint.
对于 PHP 使用此函数:
date_default_timezone_set()
MySQL:
default-time-zone='timezone'
如果您拥有 root 权限,您可以使用以下语句将全球服务器时区值设置为 运行-时间:
SET GLOBAL time_zone = timezone;
每个连接时区。每个连接的客户端都有自己的时区设置,由会话 time_zone variable
指定。最初,会话变量从 global time_zone
变量中获取其值,但客户端可以使用以下语句更改其自己的时区:
SET time_zone = timezone;
我可以通过编辑 phpmyadmin 中显示 "time zone" 的行,从可变部分更改我的 mysql 默认时区。
在这里您还可以更改格式,您可以在 mysql 支持 http://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html 中找到更多内容,希望对您有所帮助。
您可以为 php 和 mysql 设置相同的时区。
下面两行PHP.
就可以轻松搞定$tz = (new DateTime('now', new DateTimeZone('Asia/Kabul')))->format('P');
$pdo->exec("SET time_zone='$tz';");
最好的方法在PDO中设置时区MySQL:
new PDO('mysql:host=localhost;dbname=nametable',
'username',
'password',
[PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = 'Europe/Rome'"]);
最好的方法在PDO中设置时区MySQL:
如果合适,是否错误你可以使用:date('P') 示例:
new PDO('mysql:host=localhost;dbname=nametable',
'username',
'password',
[PDO::MYSQL_ATTR_INIT_COMMAND =>"SET NAMES utf8;SET time_zone = '".date('P')."'"]);
感谢其他答案,我找到了最适合我的解决方案,只需几行代码,无需修改任何服务器配置文件。
1) 在 PHP 中设置所需的时区:
date_default_timezone_set('Europe/Rome');
2)建立PDO连接到MySql:
$MySqlConnection = new PDO("mysql:host=myHost;dbname=MyDb;charset=myCharset", $myUser, $myPwd);
3)在PDO资源中设置相同的时区:
$MySqlConnection->exec("SET TIME_ZONE = '".date('P')."';");
由于MySQL可能无法识别时区名称Europe/Rome
,请使用date('P')
以+/-HH:mm
格式传递它。
请务必注意,此方法允许您管理从夏令时到冬令时的转换,反之亦然,而无需更改代码。