php时区问题,php时区问题

### 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值