CakePhp允许在这两个文件中为数据源(数据库)和应用程序设置时区:
在配置/应用程序中.php :
'Datasources' => [
'default' => [
'className' => 'CakeDatabaseConnection',
'driver' => 'CakeDatabaseDriverMysql',
'persistent' => false,
'host' => 'localhost',
'timezone' => 'UTC',
...
]
]
在配置/boostrap中.php :
/*
* Set server timezone to UTC. You can change it to another timezone of your
* choice but using UTC makes time calculations / conversions easier.
*/
date_default_timezone_set('UTC');
它到底做了什么? 因为当我在数据库中保存日期时间列时,它甚至不会将其转换为 UTC......
那么有什么意义呢?应该如何使用?
谢谢。
它的具体作用取决于所使用的DBMS,对于MySQL,它会更改time_zone
设置(仅适用于该连接),这会影响所谓的">区域敏感"功能和数据类型,例如NOW()
和TIMESTAMP
。DATETIME
类型列不受影响,但它们不区分区域。
当前会话时区设置会影响区域敏感时间值的显示和存储。这包括由 NOW() 或 CURTIME() 等函数显示的值,以及存储在 TIMESTAMP 列中并从中检索的值。TIMESTAMP 列的值将从当前时区转换为 UTC 以进行存储,并从 UTC 转换为当前时区以进行检索。
当前时区设置不会影响函数(如 UTC_TIMESTAMP() ))显示的值或"日期"、"时间"或"日期时间"列中的值。这些数据类型中的值也不以 UTC 格式存储;时区仅在从 TIMESTAMP 值转换时适用于它们。如果需要 DATE、TIME 或 DATETIME 值的区域设置特定算术,请将其转换为 UTC,执行算术运算,然后转换回来。
https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html
CakePHP 目前在读取/写入数据库时不会转换时区。
通过date_default_timezone_set()
设置的默认PHP时区将影响CakePHP在编组时解析/解释日期/时间值的方式(例如,在创建/修补实体时会发生这种情况),以及如何创建CakePHP/Chronos日期/时间对象。
参见
- >国际化和本地化>解析本地化日期时间数据的 说明书
- 食谱>日期和时间
- 食谱>克罗诺斯