Php Yii2,并以UTC格式在数据库中存储数据
我正在使用Php Yii2,并以UTC格式在数据库中存储数据,php,mysql,yii,timezone,yii2,Php,Mysql,Yii,Timezone,Yii2,我正在使用Yii2,我想知道它是如何决定在数据库中存储数据的时区的 我注意到,它似乎表明它只是控制输入数据传递给函数(如函数)时的时区,并使用将所述数据转换为正确的时间输出 但我想知道如何确保它将数据插入到正确时区的数据库中,以便可以信任$defaultTimezone的值 对于MySQL,是否需要运行类似的程序: SET time_zone = timezonename; 如果希望应用程序只使用一个时区,则只需将以下行添加到配置文件或条目脚本(默认情况下为web/index.php): 如果
Yii2
,我想知道它是如何决定在数据库中存储数据的时区的
我注意到,它似乎表明它只是控制输入数据传递给函数(如函数)时的时区,并使用将所述数据转换为正确的时间输出
但我想知道如何确保它将数据插入到正确时区的数据库中,以便可以信任$defaultTimezone
的值
对于MySQL
,是否需要运行类似的程序:
SET time_zone = timezonename;
如果希望应用程序只使用一个时区,则只需将以下行添加到配置文件或条目脚本(默认情况下为web/index.php):
如果希望应用程序只使用一个时区,则只需将以下行添加到配置文件或条目脚本(默认情况下为web/index.php):
好的,以下是我在这方面的发现: 时间戳: MySQL将自动将此值存储为
UTC
,并根据MySQL服务器时区将您提供的值转换为UTC和UTC
然而,有些人指出:
我建议您将服务器时区设置为UTC
,如下所示:
SET time_zone = 'UTC';
$tz = new DateTimeZone('UTC');
$dt = new DateTime("now", $tz);
$utc_timestamp = $dt->format('U');
那么,如果你在世界各地都有服务器,你总是会在每台服务器上得到相同的数据,这将是你传递给它的相同数据,因此这将基于你的PHP时区,因此如果你想让它传回UTC
时间,那么你应该使用NOW()
myswl函数存储时间戳
如果不设置服务器时区,MySQL通常会依赖系统
时区,并且每台服务器都会根据其时区返回不同的时间戳
如果您想在现有系统中实施UTC
更改,则其行为将有所不同。无论您传递什么,它似乎总是将日期返回为UTC
如果您将服务器时区设置为UTC
,然后将其更改为其他时区,则此时事情开始变得有点棘手
日期和日期时间
据我所知,这些只是存储并返回您提供给它们的确切数据
存储unix时间戳:
如上所述,这些将只存储您给它们的任何值,因为您只是将它们存储为任何旧的整数
;但是,如果您想在UTC中存储时间戳,则可以使用@NgôVăn Thao所述的UNIX_timestamp
,或者如果您需要在PHP中存储时间戳,则可以执行以下操作:
SET time_zone = 'UTC';
$tz = new DateTimeZone('UTC');
$dt = new DateTime("now", $tz);
$utc_timestamp = $dt->format('U');
U
表示php date函数中的unix时间戳格式选项;如果要以另一种格式返回日期,可以使用以下任意格式
总之
- 使用
设置时区='UTC'
- 将数据插入
字段时,请使用TIMESTAMP
NOW()
- 使用
或上面提供的代码以UTC格式存储UNIX\u TIMESTAMP()
UNIX时间戳
执行上述操作应始终确保以UTC格式返回相关时间/日期。好的,以下是我在这方面的发现: 时间戳: MySQL将自动将此值存储为
UTC
,并根据MySQL服务器时区将您提供的值转换为UTC和UTC
然而,有些人指出:
我建议您将服务器时区设置为UTC
,如下所示:
SET time_zone = 'UTC';
$tz = new DateTimeZone('UTC');
$dt = new DateTime("now", $tz);
$utc_timestamp = $dt->format('U');
那么,如果你在世界各地都有服务器,你总是会在每台服务器上得到相同的数据,这将是你传递给它的相同数据,因此这将基于你的PHP时区,因此如果你想让它传回UTC
时间,那么你应该使用NOW()
myswl函数存储时间戳
如果不设置服务器时区,MySQL通常会依赖系统
时区,并且每台服务器都会根据其时区返回不同的时间戳
如果您想在现有系统中实施UTC
更改,则其行为将有所不同。无论您传递什么,它似乎总是将日期返回为UTC
如果您将服务器时区设置为UTC
,然后将其更改为其他时区,则此时事情开始变得有点棘手
日期和日期时间
据我所知,这些只是存储并返回您提供给它们的确切数据
存储unix时间戳:
如上所述,这些将只存储您给它们的任何值,因为您只是将它们存储为任何旧的整数
;但是,如果您想在UTC中存储时间戳,则可以使用@NgôVăn Thao所述的UNIX_timestamp
,或者如果您需要在PHP中存储时间戳,则可以执行以下操作:
SET time_zone = 'UTC';
$tz = new DateTimeZone('UTC');
$dt = new DateTime("now", $tz);
$utc_timestamp = $dt->format('U');
U
表示php date函数中的unix时间戳格式选项;如果要以另一种格式返回日期,可以使用以下任意格式
总之
- 使用
设置时区='UTC'
- 将数据插入
字段时,请使用TIMESTAMP
NOW()
- 使用
或上面提供的代码以UTC格式存储UNIX\u TIMESTAMP()
UNIX时间戳