衆所周知,地球繞着太陽轉的同時也會自轉,所以同一時刻不一樣地區所接收到太陽照射的狀況不一樣,因此有的地區是日出,有的地區是日落,還有的地區多是黑夜.php
既然地球上的不一樣地區時間不一樣,那總要有統一的時間刻度才能方便文化科技交流吧,否則你們說的都是當地時間,這樣豈不是亂套了?java
有問題就要解決問題,不一樣地區時間不一樣就要統一時間標準,而統一時間標準的前提就是要弄清楚全球的時間差別到底在哪以及各地的當地時間如何互相轉換.git
原來的時間標準是格林尼治標準時間,隨着精確計時的發展須要,已被新的時間標準所取代,目前的時間標準是世界協調時.數據庫
如今有了統一的時間標準,不一樣地區的時間就能夠統一換算成世界協調時再轉換成當地時間了,不再會出現同一時刻不一樣時間了!編程
示例:服務器
UTC+8
) : 2019-05-30 13:30:00
UTC
) : 2019-05-30 05:30:00
UTC-5
) : 2019-05-30 00:30:00
格林尼治標準時間(又稱 格林威治平均時間或 格林威治標準時間,英文是 GreenwichMeanTime,簡稱 GMT ),格林尼治標準時間的正午是指當太陽橫穿 格林尼治子午線時(也就是在格林尼治時)的時間.
格林尼治是英國倫敦的一個小鎮,是地理經度的起點,本初子午線所在的經度是零度經度,所在的時區是零時區.函數
咱們知道一天共有 24
小時,對應着全球 24
個時區,而地球自西向東自轉,零時區後依次是東一區到東十一區,而後是東十二區.緊接着是西十二區,西十一區到西一區,最後又回到零時區.工具
其中東十二區和西十二區是 同一個時區,又被稱爲 東西十二區.
總的來講,時區分爲東十二區和西十二區以及零時區,其中東西十二區是同一個時區,所以共有 24
個時區.spa
示例:操作系統
因爲北京位於東八區,比零時區多個 8
個時區,意味着北京時間比格林標準時間快 8
個小時.
因此,北京時間中午 12 點整的時候,格林尼治才清早 4 點鐘,估計還在睡覺呢! ( GMT+8
就是北京時間)
格林尼治標準時間與 地球自轉有關,不能知足精確計時的需求,所以再也不做爲 標準時間,取而代之的是協調世界時.
協調世界時(又稱 世界統一時間或 世界標準時間或 國際協調時間,英文是 Coordinated Universal Time,簡稱 UTC ),協調世界時是以 原子時秒長爲基礎,在時刻上儘可能接近於 格林尼治標準時間的一種時間計量系統.
在不須要精確到秒的狀況下, GMT
和 UTC
基本一致,但 UTC
是以更加精確的原子時爲基礎,所以經常使用於科學計算領域,也是目前時間計量的統一標準.
示例:
北京時間 12:00
,換算成 GMT
或 UTC
時間都是 04:00
( UTC+8
也是北京時間)
北京時間(又稱 中國標準時間),是首都北京所在的時區做爲中國的標準時間,比 格林尼治標準時間快8小時.
我國幅員遼闊,從西到東橫跨東五,東六,東七,東八和東九等五個時區.因此全國統一採用首都北京所在的東八時區的區時做爲標準時間,也就是北京時間.
時區信息數據庫,又稱 Olson數據庫,是一個主要應用於電腦程序以及操做系統的可 協做編輯世界時區信息的數據庫.
時區信息數據庫採用按「區域/位置」命名規範,方便應用於計算機世界,其中英文地名中的空格用下劃線「_」代替,連詞符「-」只在英文地名自己包含時使用.
示例:
Asia/Hong_Kong
: 亞洲/香港Asia/Macau
: 亞洲/澳門Asia/Shanghai
: 亞洲/上海Asia/Taipei
: 亞洲/臺北Asia/Urumqi
: 亞洲/烏魯木齊
上述時區主要是
php
中所支持的中國時區,參考
亞洲所支持的時區列表
時區不只僅是現實生活的問題,計算機編程世界也有時間,天然也離不開時區的概念.
在計算機世界中,一切都是數據,最好時區的概念也能體如今相關數據庫中,幸運的是已經有前輩爲咱們提供了時區信息數據庫,而各種語言基本都會提供時區的工具類.
php
中的日期時間函數庫是 php
內置函數庫,咱們能夠方便地操做時間,設置時區等.
正常狀況下, date
擴展默認是啓用的,咱們能夠輸入 phpinfo
打印出 php
的基本信息,而後搜索關鍵字 date
就能夠找到關於 date
擴展的相關信息.
<?php // 獲取默認時區 echo "默認時區: ".ini_get("date.timezone")."<br/>"; // 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."<br/>"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."<br>"; // 打印 php 信息 phpinfo(); ?>
默認時區:
當前時區: UTC
當前時間: 2019-05-30 05:30:00
選項 | 值 |
---|---|
date/time support(日期時間支持狀況) | enabled(已啓用) |
timelib version(時間庫版本) | 2016.05(2016.05 ) |
"Olson" Timezone Database Version(Olson 時區數據庫版本) |
2018.5(2018.5 ) |
Timezone Database(時區數據庫) | internal(內部的) |
Default timezone(默認時區) | UTC(協調世界時) |
因而可知,假設不設置時區的話,默認時區是
協調世界時,該時區和北京時間相比慢
8
個小時!
翻閱 php
開發文檔中能夠找到目前全部支持時區列表,下面整理出關於中國的主要時區.
Asia/Hong_Kong
: 亞洲/香港Asia/Macau
: 亞洲/澳門Asia/Shanghai
: 亞洲/上海Asia/Taipei
: 亞洲/臺北Asia/Urumqi
: 亞洲/烏魯木齊
經常使用時區是上海,並無北京,固然也能夠設置成
PRC
(中華人民共和國)!
若是沒有設置時區的話,默認時區應該是協調世界時(UTC
),雖然說是通用的時間標準,但轉換成當地時間仍是須要必定換算的,並且看起來也不太舒服.
因此最好仍是修改一下時區的設置項,若是業務不考慮國際化需求,那麼永久性把時區固定就能夠了,若是有國際化的業務場景,那麼最好可以動態設置時區,這樣就能清楚知道當地時間了.
所以,下面主要提供兩種方式來設置時區,分別是靜態設置和動態設置,其中動態設置又提供了兩種方法.
php
配置php
的配置文件默認位於 :/private/etc/php.ini
,打開文件後修改date.timezone
選項.
因爲這種方法是直接修改配置文件,所以時區設置後適用於全部腳本,只不過須要重啓服務器方可生效.
[Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone ;date.timezone = ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667 ; http://php.net/date.default-longitude ;date.default_longitude = 35.2333 ; http://php.net/date.sunrise-zenith ;date.sunrise_zenith = 90.583333 ; http://php.net/date.sunset-zenith ;date.sunset_zenith = 90.583333
# 去掉;並設置時區,取值能夠是PRC,也能夠是Asia/Shanghai等時區 date.timezone = PRC
詳情請參考: http://php.net/date.timezone
php
配置ini_set 支持設置當前腳本的默認時區選項.
靜態設置時區僅僅適合時區固定的狀況,若是須要動態切換時區,修改配置文件就不能知足這種狀況了.
所以,php
中還提供了動態修改 php.ini
配置文件的方法,ini_set()
方法恰好支持動態設置時區.
不用重啓服務器,但僅僅針對
當前腳本生效,其中
ini_set
方法支持的
php.ini 配置選項列表
// 設置當前時區 ini_set("date.timezone", "Asia/Tokyo"); // 獲取默認時區 echo "當前時區: ".ini_get("date.timezone")."<br/>"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."<br>";
當前時區: Asia/Tokyo
當前時間: 2019-05-30 14:30:00
php
時區date_default_timezone_set 方法用於設置當前腳本的默認時區.
ini_set
雖然支持設置時區選項,但畢竟不是專業設置時區的方法,date_default_timezone_set
纔是專門設置時區的方法.
這兩個方法都屬於動態設置時區,也都是針對當前腳本生效,也都不用重啓服務器就能立馬生效.
// 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."<br/>"; // 設置當前時區 date_default_timezone_set("UTC"); // 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."<br/>"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."<br>";
當前時區: Asia/Tokyo
當前時區: UTC
當前時間: 2019-05-30 05:30:00
時區和時間密切相關,統一時間說的實際上是統一時間的標準,這樣一個地區的當地時間就能夠輕易轉換成另外一個地區的當地時間了.
目前世界上統一的時間標準是協調時間時(UTC
),中國的時間標準是北京時間,北京時間比協調時間時快 8
個小時.
現實世界的時區也要反映到計算機世界,其中時區信息數據庫就是用於表示現實世界的時區概念.
因而可知,時區是一個通用概念,不只 php
有時區,java
和 js
等語言也有時區概念,能夠說只要有時間的地方都離不開時區.
關於時區的小技能,你 get
到了嗎?