Jas*_*vis 45 php mysql timezone
我读到的关于将时间转换为用户时区的地方说,最好的方法是以UTC格式存储日期和时间,然后将用户的时区偏移量添加到此时间.
如何以UTC时间存储日期?我使用MySQL DATETIME字段.
在我的PHP代码中向MySQL添加新记录时,我将使用now()插入MySQL DATETIME.
我是否需要使用不同于now()存储UTC时间的东西?
Rem*_*anu 44
MySQL的: UTC_TIMESTAMP()
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS.uuuuuu格式返回当前UTC日期和时间,具体取决于函数是在字符串还是数字上下文中使用
PHP: gmdate()
PHP中date_default_timezone_set()还使用PHP来设置脚本的当前时区.您可以将其设置为客户端时区,以便所有格式化函数在本地时间返回时间.
事实上,虽然我很难让这个工作,并总是绊倒一些陷阱.例如.从MySQL返回的时间信息未格式化为"UTC",因此如果您不小心,strtotime会将其转换为本地时间.我很想知道是否有人有一个可靠的解决方案可以解决这个问题,当日期遍历媒体边界时(HTTP-> PHP-> MySQL和MySQL-> PHP-> HTTP),也会考虑XML和RSS /原子.
Hal*_*luk 40
我建议在UTC时区插入日期.这将为您节省很多令人头疼的问题.
INSERT INTO abc_table (registrationtime) VALUES (UTC_TIMESTAMP())
Run Code Online (Sandbox Code Playgroud)
当我查询我的数据时,我使用以下PHP脚本:
<?php
while($row = mysql_fetch_array($registration)) {
$dt_obj = new DateTime($row['message_sent_timestamp'] ." UTC");
$dt_obj->setTimezone(new DateTimeZone('Europe/Istanbul'));
echo $formatted_date_long=date_format($dt_obj, 'Y-m-d H:i:s');
}
?>
Run Code Online (Sandbox Code Playgroud)
您可以DateTimeZone使用其中一个可用的PHP时区替换该值.
https://dba.stackexchange.com/questions/20217/mysql-set-utc-time-as-default-timestamp
要与@ ypercube的注释一起CURRENT_TIMESTAMP存储为UTC但作为当前时区检索,您可以使用--default_time_zone选项影响服务器的时区设置以进行检索.这使您的检索始终为UTC.
默认情况下,选项为"SYSTEM",这是您的系统时区设置方式(可能是也可能不是UTC!):
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 16:28:45 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
您可以动态设置:
mysql> SET @@session.time_zone='+00:00';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | +00:00 |
+--------------------+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
或永久在你的my.cnf:
[mysqld]
**other variables**
default_time_zone='+00:00'
Run Code Online (Sandbox Code Playgroud)
重新启动服务器,您将看到更改:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| +00:00 | +00:00 |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2012-09-25 20:27:50 |
+---------------------+
1 row in set (0.01 sec)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52869 次 |
| 最近记录: |