Home > Article > Backend Development > A summary of time zones in PHP and MySQL_PHP Tutorial
The city setting on the PHP script side can be set under php.ini to the value of the date.timezone key to 'Asia/Shanghai'. But usually the shared virtual host itself does not have permission to modify php.ini. At this time, you should add
ini_set('date.timezone','Asia/Shanghai'); to the public part of the program to dynamically modify the settings of php.ini. You can then test whether the time is correct:
var_dump(date()); If the local time of the server is correct, then the problem will generally be solved. Attached, PHP 5.1 and above provides a special function to modify the corresponding time zone:
date_default_timezone_set('Asia/Shanghai'); It is recommended to use this function because it is more versatile. Other mainland time zones that can be used corresponding to 'Asia/Shanghai' are: Asia/Chongqing, Asia/Shanghai, Asia/Urumqi (in order, Chongqing, Shanghai, Urumqi); available in Hong Kong and Taiwan: Asia/Macao, Asia/Hong_Kong, Asia /Taipei (Macau, Hong Kong, Taipei in order); and Singapore: Asia/Singapore; other available values are: Etc/GMT-8, Singapore, Hongkong, PRC; foreigners seem to have missed Beijing.
However, after I successfully modified the time zone on the PHP side, I found that the date was not recorded correctly. At this time, I considered whether it was a database problem. Sure enough, because the function inserted by the program does not call PHP's time, but directly uses MySQL's CURRECT_TIMESTAMP. At this time, you need to consider whether the time zone in MySQL can be modified.
Referred to the MySQL documentation and found a feasible SQL statement:
SET GLOBAL time_zone = '+8:00'; where '+8:00' is the representation of East Eighth District method, and so on for other urban areas. And when I inserted the statement into the database model, I found that the permissions were insufficient (damn virtual host provider). Next, I debugged many statements, such as:
DATE_ADD(UTC_TIMESTAMP(), INTERVAL 8 HOUR); SQL statement to display time zone:
SHOW VARIABLES LIKE 'system_time_zone' and so on. Due to MySQL permission restrictions, there is no complete solution. I Googled it and found that foreigners have a very good solution. But he needs to modify each SQL statement that inserts data. This solution is not very effective. Once the database time zone is changed to normal, the corresponding SQL statement must be changed back.
And I consider that since the PHP side can already solve the time problem correctly. Although the MySQL database can be solved using corresponding functions, it will have to be changed back if it is migrated to another host environment in the future. The corresponding field is of type TIMESTAMP, and the default value is CURRECT_TIMESTAMP. Of course, the time can be specified.
Then my approach is to let PHP insert the current correct time, so although the program needs to be modified accordingly. However, if you modify the configuration in the future, you only need to modify one place. When finally inserting into the database, pay attention to the format:
date('Y-m-d H:i:s') This will solve the problem. Attached, some very good reference materials:
http://www.modwest.com/help/kb6-256.html
http://topic.csdn.net/t/20060503/07 /4728521.html
http://www.phpchina.com/5173/viewspace_5132.html
http://www.phpx.com/pth110355.php
Update: From this, brother wiLdGoose said that he also Encountered the same problem but couldn't solve it. As a result, after various assumptions and judgments, I finally found out that it was Zend Studio's time zone configuration problem (I sweated). It seems that in addition to the operating environment, the development environment also needs to pay attention to the following.
I also encountered this problem today. I am luckier than you. On my own host, I can:
SET GLOBAL time_zone = '+8:00';
Haha, it’s a pity for you, you can’t use UNIX_TIMESTAMP( ) such a function.