摘要:科普一下什么是時區眾所周知地球繞著太陽轉的同時也會自轉因此同一時刻不同地區所接收到太陽照射的情況不同所以有的地區是日出有的地區是日落還有的地區可能是黑夜既然地球上的不同地區時間不同那總要有統一的時間刻度才能方便文化科技交流吧不然大家說的都是
科普一下什么是時區
眾所周知,地球繞著太陽轉的同時也會自轉,因此同一時刻不同地區所接收到太陽照射的情況不同,所以有的地區是日出,有的地區是日落,還有的地區可能是黑夜.
既然地球上的不同地區時間不同,那總要有統一的時間刻度才能方便文化科技交流吧,不然大家說的都是當地時間,這樣豈不是亂套了?
有問題就要解決問題,不同地區時間不同就要統一時間標準,而統一時間標準的前提就是要弄清楚全球的時間差異到底在哪以及各地的當地時間如何互相轉換.
原來的時間標準是格林尼治標準時間,隨著精確計時的發展需要,已被新的時間標準所取代,目前的時間標準是世界協調時.
現在有了統一的時間標準,不同地區的時間就可以統一換算成世界協調時再轉換成當地時間了,再也不會出現同一時刻不同時間了!
示例:
北京時間(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 個時區.
示例:
由于北京位于東八區,比零時區多個 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 擴展的相關信息.
示例
"; // 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."
"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."
"; // 打印 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")."
"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."
";
結果
當前時區: Asia/Tokyo
當前時間: 2019-05-30 14:30:00
date_default_timezone_set 方法用于設置當前腳本的默認時區.
ini_set 雖然支持設置時區選項,但畢竟不是專業設置時區的方法,date_default_timezone_set 才是專門設置時區的方法.
這兩個方法都屬于動態設置時區,也都是針對當前腳本生效,也都不用重啟服務器就能立馬生效.
示例
// 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."
"; // 設置當前時區 date_default_timezone_set("UTC"); // 獲取當前時區 echo "當前時區: ".date_default_timezone_get()."
"; // 當前時間 echo "當前時間: ".date("Y-m-d H:i:s")."
";
結果
當前時區: Asia/Tokyo
當前時區: UTC
當前時間: 2019-05-30 05:30:00
時區和時間密切相關,統一時間說的其實是統一時間的標準,這樣一個地區的當地時間就可以輕易轉換成另一個地區的當地時間了.
目前世界上統一的時間標準是協調時間時(UTC),中國的時間標準是北京時間,北京時間比協調時間時快 8 個小時.
現實世界的時區也要反映到計算機世界,其中時區信息數據庫就是用于表示現實世界的時區概念.
由此可見,時區是一個通用概念,不僅 php 有時區,java 和 js 等語言也有時區概念,可以說只要有時間的地方都離不開時區.
關于時區的小技能,你 get 到了嗎?
美劇<<閃電俠>>當地時間是星期二晚上八點開播,請問北京時間何時開播?
英劇<<神探夏洛克>>北京時間凌晨四點半開播,請問當地時間是何時開播?
泰劇<<新鐵石心腸>>當地時間是晚上九點二十開播,請問北京時間是何時?
參考資料時區相關知識掃盲
時區時差時間換算
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31611.html
摘要:已經超出本地存儲限定大小可進行超出限定大小之后的操作,如下面可以先清除記錄,再次保存面試官一波素質三連對于只是會使用的同學來說,肯定是不得其解的。 最近面試的時候關于html5API總會被問到localStorage的問題, 對于一般的問題很簡單,無非就是 localStorage、sessionStorage和cookie這三個客戶端緩存的區別 localStorage的API,g...
摘要:函數防抖場景假設網站有個搜索框用戶輸入文本我們會自動聯想匹配出一些結果供用戶選擇我們可能首先想到的做法就是監聽事件然后異步查詢結果但是如果用戶快速的輸入了一串字符假設是個字符那么就會在瞬間觸發次請求這無疑不是我們想要的我們想要的是用戶停止輸 函數防抖 場景 假設網站有個搜索框, 用戶輸入文本我們會自動聯想匹配出一些結果供用戶選擇,我們可能首先想到的做法就是監聽keypress事件, 然...
摘要:一直使用定義變量,的出現給變量定義增加了兩個大將,。聲明的變量,塊作用域,不重復聲明覆蓋,限制了變量的作用域,保證變量不會去污染全局變量,所以盡量將改為用。 一直使用var定義變量,ES6的出現給變量定義增加了兩個大將let,const。那它們有什么區別呢。 1、const關鍵字它的作用就是定義一個常量,一旦定義無法更改,不能重復聲明覆蓋; showImg(https://segmen...
摘要:函數節流背景中的函數大多數情況下都是由用戶主動調用觸發的除非是函數本身的實現不合理否則一般不會遇到跟性能相關的問題但在少數情況下函數的觸發不是由用戶直接控制的在這些場景下函數可能被非常頻繁調用而造成大的性能問題場景事件事件滾動事件共同的特征 函數節流 背景 javascript中的函數大多數情況下都是由用戶主動調用觸發的, 除非是函數本身的實現不合理, 否則一般不會遇到跟性能相關的問題...
摘要:是這樣描述的函數中可能會有表達式,這會使函數暫停執行,等待表達式中的解析完成后繼續執行函數并返回解決結果。返回值返回對象的處理結果。當執行到時,這個任務會被放入到回調隊列中,等待調用棧有空閑時事件循環再來取走它。 原文地址:https://lvdingjin.github.io/tech/2018/05/27/async-and-await.html 故事要從一道今日頭條的筆試題說起...
閱讀 2937·2021-10-14 09:42
閱讀 3702·2021-08-11 11:19
閱讀 3548·2019-08-30 13:57
閱讀 3130·2019-08-30 13:49
閱讀 1541·2019-08-29 18:38
閱讀 902·2019-08-29 13:16
閱讀 1858·2019-08-26 13:25
閱讀 3233·2019-08-26 13:24