PHP中關于時間(戳)、時區、本地時間、UTC時間等的梳理

PHP中關于時間(戳)、時區、本地時間、UTC時間等的梳理

在PHP開發中,我們經常會在時間問題上被搞糊涂,比如我們希望顯示一個北京時間,但是當我們使用date函數進行輸出時,卻發現少了8個小時。幾乎所有的php猿類都必須對php中幾個重要的時間轉換等方法進行研究。本文就來梳理這些問題。

時間戳(timestamp)

GMT

在時間戳這個點上,它是一個概念,而不是具體的編程問題,是計算機世界通用的一種約定。時間戳是指格林尼治時間(GMT)1970年01月01日00時00分00秒到當前時間的總秒數。

GMT(也被稱為世界時)是固定為本初子午線經過地區的時間,因此被作為時間參照物。

UTC

協調世界時(UTC)和GMT一樣都是一種時間的參照物,但是他們的計算方法不同UTC是以原子時秒長為基礎,在時刻上盡量接近于世界時的一種時間計量系統,從精度上講,更加精確(自然也比GMT更精確),因此被稱世界統一時間,世界標準時間,國際協調時間。

Unix時間戳

Unix時間戳是在計算機領域才有的,每一臺電腦(服務器)在生產的時候,將GMT/UTC的1970年01月01日00時00分00秒作為起始值進行計算,得到的總秒數就是這個Unix時間戳。至于是GMT還是UTC意義并不大,因為GMT和UTC的1970年01月01日00時00分00秒是一致的,起點一致的情況下,運行的秒數也是一致的。

為什么要時間戳?因為從0開始運行的秒數永遠相等,即使出現潤秒,也并不影響時間戳。
在php中,可以通過time函數獲取時間戳:

time();

但是你應該明白,time()獲取的是,當前這臺電腦(服務器)上的Unix時間戳。兩臺電腦可能這個時間戳并不相同,有的甚至相差幾十秒。從理論上講時間戳應該是一摸一樣的,但是由于不同的電腦硬件出廠時的設定不同,也會導致GMT/UTC起始值稍有差異,甚至在計算每一秒時也有可能存在差異,這臺機器上一秒的時間比另一臺要長也是有可能的,時間久了,積累下來的時間差就會體現出來。但是,這種時間差一般不會超過幾秒鐘。

時區(Time Zone)

但是上面的time()的表述并不準確,因為我們在實踐中經常遇到time()得到的值并不是我們想要的。對應的是,date()函數得到的值,也可能出乎我們意料。

什么是時區呢?也就是以GMT/UTC為參照物的時間偏移。

以GMT為參照物的時區

在傳統的教材里,全球被劃分為24個時區,首先基于經度,其次按照國家或地區,將每一個地區劃分到某一個時區,這樣可以避免時間上的混亂。在24時區劃分之前,世界上的時間換算并沒有準確的參照,比如中國人去英國,只能問當地人現在幾點,然后撥自己的表來對。而當時區劃分之后,中國人到了英國,只需要撥慢8小時即可。在時區劃分之前,英國人跟中國人的時間可能并不是嚴格的8小時之差。

但為了照顧到同一個國家內時間的統一,大部分國家規定自己屬于同一個時區,比如中國,統一規定為東八區,這樣中國東部和西部可以采用同一個時間。畢竟沒有必要大家一定要在早上6點看到日出,沿海城市5點看,烏魯木齊9點看,并不影響大家的正常作息。

在php中,提供了大量的地區作為時區切換的標準,例如:

date_default_timezone_set('Asia/Shanghai');echo date('Y-m-d H:i:s'); // 獲得的是上海所在時區的時間

注意:PRC是中國的地區時標志,并不在Asia中,而是在Others里面找。

以UTC為參照物計算時區

但隨著UTC取代GMT成為世界標準時后,時區的計算開始使用UTC作為標準。UTC+8代表東八區,UTC-11代表西十一區。
不過隨著精度需求的提升,按大時區計算已經不能滿足需求,0.5個時區也被普遍使用,比如UTC+7.5。

在PHP中,我們可以采用這種方式來切換時區。比如:

date_default_timezone_set('UTC');echo date('Y-m-d H:i:s'); // 獲取的是0時區時間

php測試代碼:time.php
<?php//設置時區echo '<br/>默認時區時間:'.date("Y-m-d H:i:s").'<br/>';//可以在文件開頭位置設置默認配置的時區//也可以在php.ini中進行設置date.timezone(所有文件生效)ini_set('date.timezone','Asia/Shanghai');echo '<br/>上海時區時間:'.date("Y-m-d H:i:s").'<br/>';//或者直接設置時間格式date_default_timezone_set('asia/tokyo');echo '<br/>東京時區時間:'.date("Y-m-d H:i:s").'<br/>';echo '<br/>格式化時間:'.date("YmdHis").'<br/>';?>

  

輸出:

默認時區時間:2018-09-15 10:53:06上海時區時間:2018-09-15 16:53:06東京時區時間:2018-09-15 17:53:06格式化時間:20180915175306

摘自:https://www.tangshuang.net/2794.html

轉載于:https://www.cnblogs.com/1906859953Lucas/p/9651379.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WebServiceStudio.exe測試webservice接口工具

WebServiceStudio.exe測試webservice接口工具 下載鏈接 https://pan.baidu.com/s/1gf8ajS3 打開工具WebServiceStudio&#xff0c;如下填寫地址&#xff0c;點擊【Get】按鈕 會顯示出需要傳參的地方&#xff0c;在value中填寫xml參數 輸入完value值后&#xff0c;點擊【Invok…

oracle最大實例數,【ORA-16196】一個實例在其生命周期里最多只能裝載和打開一個數據庫...

如果使用“alter database open;”命令打開一個曾經被“alter database close;”命令關閉的數據庫時&#xff0c;您將會收到如下的報錯信息&#xff1a;"ORA-16196: database has been previously opened and closed"這個報錯的原因是什么呢&#xff1f;原因是&#…

Navicat工具導出Mysql數據表結構到Excel文件中

原文鏈接&#xff1a;https://blog.csdn.net/zt15732625878/article/details/77978266 ------------------------------------------------------------------------ 前言 項目中數據庫設計已經完成&#xff0c;現在到了代碼實現的階段&#xff0c;數據庫中沒有數據&#xff…

利用MAVEN的profile 實現打包環境的切換

樂哉碼農產生問題的背景 由于在項目開發的時候&#xff0c;我們一般都是使用的本地庫&#xff0c;數據庫連接寫的是本地的&#xff0c;如果我們將項目打成war的時候&#xff0c;里面的配置連接寫的是我們本地的&#xff0c;當我們直接把war拷貝到服務器上面進行部署的時候&…

服務器oracle優化,oracle服務器配置及優化

1.在ORACLE中實現分布式快速存取和充實內存是很重要的。要不惜任何代價避免頁面調度和交換﹐每次都必須把系統全局區(SGA)放到內存。將SGA放到內存中﹐在INIT.ORA中設置參數 PRE_PAGE_SGAPRE_PAGE_SGAYES2.回卷段的竟爭會降低系統的性能。SELECT GETS,WAITS from V$ROLLSTAT;…

Android 常用的數據加密方式

前言 Android 很多場合需要使用到數據加密&#xff0c;比如&#xff1a;本地登錄密碼加密&#xff0c;網絡傳輸數據加密&#xff0c;等。在android 中一般的加密方式有如下&#xff1a; 亦或加密AES加密RSA非對稱加密當然還有其他的方式&#xff0c;這里暫且介紹以上三種加密算…

oracle可以注入嗎,ORACLE 注入

1判斷是什么數據庫and exist(select * from dual)and exists(select * from user_tables)原理&#xff1a;dual表和user_tables表是oracle中的系統表返回正常&#xff0c;那么就可以肯定這是oracle。2查字段數order by 10-- //錯誤,列數小于10order by 3-- //正常,列數等于…

centos升級glibc(升級到 2.17版)

1、原先的系統glibc庫的版本是2.12&#xff0c;需要升級到2.17版本。 下載地址&#xff1a; http://ftp.gnu.org/gnu/glibc/ http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz 這里可以選擇你所需要的版本。 2、安裝部署 [rootkafzook1 common]# tar -xf glibc-2.17.tar.g…

Day31 python基礎--網絡編程基礎-socketserver

一&#xff0c;驗證客戶端合法性 #server端 import os import hmac import socket secret_key balex_sbdef auth(conn):msg os.urandom(32) #生成一個隨機的字符串conn.send(msg) #發送到client端result hmac.new(secret_key,msg) #處理這個隨機字符串&#xff0c;得到一…

康樂php一鍵腳本,kangle一鍵腳本

腳本簡介1、本腳本是可以一鍵安裝kangleEasypanelmysql商業集合腳本。2、腳本本身集成&#xff1a;PHP5.3、PHP5.4、PHP5.5、PHP5.6、PHP7.1、PHP7.2、PHP7.3、MYSQL5.63、支持前臺用戶任意切換PHP5.3-7.3以適應網站程序Kangle一鍵腳本特點1.安裝包內PHP套件以及Kangle套件均已…

oracle data guard方案,Oracle Data Guard 概念篇

一個Data Guard 配置由一個生產庫和一個或者多個standby數據庫組成&#xff0c;在Data Guard配置中&#xff0c;主庫和備庫都既可以是rac環境&#xff0c;也可以是單機環境。這篇文章主要介紹dataguard的一些基本知識dataguard的分類、dataguard的服務類型、dataguard的保護模式…

洛谷P4133 [BJOI2012]最多的方案(記憶化搜索)

題意 題目鏈接 求出把$n$分解為斐波那契數的方案數&#xff0c;方案兩兩不同的定義是分解出來的數不完全相同 Sol 這種題&#xff0c;直接爆搜啊。。。 打表后不難發現$<1e18$的fib數只有88個 最先想到的應該是直接把$n$加入到搜索狀態里&#xff0c;然后枚舉能被分成哪些 但…

centos一鍵安裝redmine

官網給出的環境要求&#xff1a; http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements ------------------------------------------------------------------------------------------------------------- 下載一鍵安裝&#xff1a;&#xff08;下載…

大話php設計模式視頻,大話PHP設計模式

工廠模式用工廠方法或者類來實例化對象&#xff0c;而不是直接new。首先我們需要創建一個工廠類&#xff0c;比如Factory.php。如果不使用工廠模式的&#xff0c;我們需要一個對象的時候通常需要new Inexistence\girlfriend();然而我們一般不只在一個地方需要這個對象&#xff…

Git 2.19 對Diff、Branch和Grep等做了改進

\Git的最新版帶來了豐富的新功能以及內部更新&#xff0c;包括改進的diff、branch和grep&#xff0c;更好的命令行補全&#xff0c;新的range-diff命令等。\\Git diff現在可以正確地標記以intent-to-add參數添加的新文件路徑。intent-to-add可以和git add命令一起使用&#xff…

su oracle c expdp,expdp/impdp 數據泵導入導出

useridtest/test --導出的用戶&#xff0c;本地用戶!!directorydmpfile --導出的邏輯目錄&#xff0c;一定要在oracle中創建完成的&#xff0c;并且給用戶授權讀寫權限dumpfilexx.dmp --導出的數據文件的名稱&#xff0c;如果想在指定的位置的話可以寫…

Centos 升級GLIBCXX3.4.25

32位系統: http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc6_4.7.2-5_i386.deb 64位系統: wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc6_8.2.0-7_amd64.deb 其他版本 http://ftp.de.debian.org/debian/pool/main/g/ 解壓 ar -x libst…

美團點評基于MGR的CMDB高可用架構搭建之路【轉】

王志朋 美團點評DBA 曾在京東金融擔任DBA&#xff0c;目前就職于美團點評&#xff0c;主要負責金融業務線數據庫及基礎組件數據庫的運維。 MySQL Group Replication&#xff08;以下簡稱MGR&#xff09;&#xff0c;于5.7.17版本正式GA&#xff0c;由Oracle官方出品&#xff0c…

使用 redmind 進行項目任務管理

一、項目經理 1.1、新建任務(工單) 1.2、查看任務狀態 二、團隊成員 2.1、查看任務 作為這個團隊的成員之一&#xff0c;每天開工第一件事便是進入redmine查看“我的工作臺”中自己的任務 2.2、每日反饋任務完成狀態 1、每天開始工作時&#xff0c;及時將任務狀態從“新…

oracle11g創建表空間大文件,oracle11g創建表空間 sql語法

--oracle 11g創建有限制大小的永久表空間--create tablespace test--datafile F:\app\shan\product\11.2.0\dbhome_1\oradata\test.dbf size 1M--autoextend on next 2M maxsize 1024M;--修改表空間大小&#xff1a;--alter database datafile F:\app\shan\product\11.2.0\dbho…