我正在使用Yii2
,我想知道它是如何决定将数据存储在数据库中的时区的?
我注意到$defaultTimezone似乎表明它只是控制输入数据在将其传递给asTime函数等函数时应该是什么时区它使用formatter timezone将所述数据转换为正确的时间输出。
但是我想知道如何确保它在正确的时区将数据插入数据库,那么$defaultTimezone
的值是否可以信任?
是否需要为MySQL
运行类似的内容:
SET time_zone = timezonename;
答案 0 :(得分:0)
如果您只想为您的应用程序使用一个时区,您只需将以下行添加到配置文件或条目脚本(默认情况下为web / index.php):
date_default_timezone_set('UTC');
答案 1 :(得分:0)
好的,这是我发现的关于此的内容:
<强>时间戳:强>
MySQL将自动将此值存储为UTC
,并将根据mysql服务器时区将您提供的内容转换为UTC并返回。
然而,有些注意事项:
我建议您将服务器时区设置为UTC
,如下所示:
SET time_zone = 'UTC';
然后,如果您在世界各地拥有服务器,那么您将始终获得在每台服务器上传回的相同数据并不重要 - 这将与您传递给它的数据相同,因此这将基于您的PHP timezone,所以如果你希望传回一个UTC
时间,那么你应该使用NOW()
myswl函数来存储TIMESTAMP。
如果您没有设置服务器时区,MySQL通常会依赖SYSTEM
时区,每个服务器会根据时区获得不同的时间戳。
如果您要对现有系统实施UTC
更改,那么它的行为会有所不同。无论你传递什么,它似乎总是将日期返回UTC
。
如果您将服务器时区设置为UTC
,然后将其更改为其他内容,那么当事情开始变得有点毛茸茸时。
日期和日期时间
据我所知,这些只是存储并返回您提供的确切数据。
存储unix时间戳:
如上所述,这些只会存储您给予他们的任何价值,因为您只是将它们存储为任何旧的integer
; 但如果你想以UTC格式存储时间戳,那么你可以使用@NgôVănThao所述的UNIX_TIMESTAMP
,或者如果你需要在PHP中这样做,那么你可以这样做:
$tz = new DateTimeZone('UTC');
$dt = new DateTime("now", $tz);
$utc_timestamp = $dt->format('U');
U
表示php日期函数中的unix时间戳格式化选项;如果您想以其他格式返回日期,则可以使用formatting options中的任何一个。
所以简而言之......
UTC
SET time_zone = 'UTC'
NOW()
字段TIMESTAMP
UNIX_TIMESTAMP()
或上面提供的代码将您的unix timestamps
存储在UTC 执行上述操作时,请务必确保以UTC格式返回相关的时间/日期。