### php时区问题
>[danger] 我们所说的任何一个时间,都是在确定了一个时区的前提下,不然这个时间就是错的。比如:新闻联播 常说“北京时间 2017-3-29 18:34:38 ……”,“美国当地时间2月18日上午在德克萨斯州发生一起……”,如果不先说明时区,那么没人能确定它是中国的时间还是美国的时间,到底什么时候发生的,不知道时区,那这个时间就没有存在的意义了。
先看一个例子:
```php
$a = time();
$a_ = date('Y-m-d H:i:s', $a);
echo date_default_timezone_get() . '
';
echo $a . '
';
echo $a_ . '
';
echo strtotime($a_) . '
';
date_default_timezone_set('PRC');
$b = time();
$b_ = date('Y-m-d H:i:s', $b);
echo date_default_timezone_get() . '
';
echo $b . '
';
echo $b_ . '
';
echo strtotime($b_) . '
';
echo $b - $a;
// 输出
UTC
1490783813
2017-03-29 10:36:53
1490783813
PRC
1490783813
2017-03-29 18:36:53
1490783813
0
```
可见在php中time()与系统的时区设置无关,其他的时间函数则与时区有关,受时区影响。
所以解决国际化网站很好的做法就是所有时间都存time()时间戳就好了,具体显示时则根据不同的时区来进行自动的转换输出就可以了。
```
注意 $_SERVER['REQUEST_TIME_FLOAT'] 和 $_SERVER['REQUEST_TIME'] 与time一样,同样的不受时区影响,都是 返回 Unix 时间戳 (自 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00) 到当前时间的秒数。 )
```
* * * * *
**PHP中与时区无关的函数**
1. time(): 标准时间戳, 指返回自从Unix纪元 (格林威治时间1970-01-01 00:00:00) 到当前GMT标准时间的秒数, 与PHP系统设置的时区无关。
2. gmdate(): 某GMT标准时间的"自定义格式"时间, 跟php系统设置的时区无关.
与其说是与时区无关,不受时区影响,不如说是零时区,它本身就是零时区,不可被修改。
**mysql中的时区问题**
[数据库如何存储时间?你真的知道吗?](https://mp.weixin.qq.com/s/h5qysXyiOpXNvJT8pbTN3g)
> **DateTime 类型是没有时区信息的(时区无关)**,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。这样就会有什么问题呢?当你的时区更换之后,比如你的服务器更换地址或者更换客户端连接时区设置的话,就会导致你从数据库中读出的时间错误。不要小看这个问题,很多系统就是因为这个问题闹出了很多笑话。
**Timestamp 和时区有关**。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。
> PS:DateTime 这种现象应该正是 时区有关 才对
* * * * *
### 参考
- [PHP: 日期/时间 - Manual](http://php.net/manual/zh/book.datetime.php)
- [关于PHP函数time() date() 和 strtotime() 的时区问题](http://www.cnblogs.com/caly/p/4277760.html)
- [PHP 时区](http://www.cnblogs.com/codesay/p/3580712.html)
- [php time()时间是北京时间吗](https://zhidao.baidu.com/question/1831874057802229700.html)
- [GMT 世界时_百度百科](http://baike.baidu.com/link?url=GcuUCseYlSQQ4Qqv44PswYAQLpubzR4N-q-V_yX3PIgPhnFFyWjyHV0kfZ2ylkf7HnpVSef29K0lAgzh_xR3xjLvm6EVPaMkrdCNsPD0an_nqU1QwdJQqItjHa0ST721UGZhjQ1lYfsI1ComJmEM7a)
- [协调世界时_百度百科](http://baike.baidu.com/link?url=UMmRg5Lls3vL2ewJphJ2KySBHRS7xWojRRiZL3MKRlrnaKDzDm8PX1fyiJZ6DIzDyXFoPnXNCCapDwyODU63095qY0gH29ZdNjtDyoe55ZSJe1K4HDw1T4zh_-VNR6l2pOUI0qijPQ-D_Gvkj5v-DCcE6DJ9MCF_mAdGtwgTc7fKxVaqRBAuEHOZbrB6oHCz)
- [UTC和GMT什么关系? - 知乎](https://www.zhihu.com/question/27052407)
- [世界协调时UTC和格林威治时有什么区别?_百度作业帮](https://www.zybang.com/question/a32d996db0c90e8cfa2a6374c4963ea8.html)
[数据库如何存储时间?你真的知道吗?](https://mp.weixin.qq.com/s/h5qysXyiOpXNvJT8pbTN3g)
----
update time: 2017-7-29 13:47:56