- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會(huì )理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標記
- 域名注冊服務(wù)機構許可:滇D3-20230001
- 代理域名注冊服務(wù)機構:新網(wǎng)數碼
php時(shí)區是一個(gè)非常有意思的問(wèn)題,安裝好apache+php環(huán)境之后會(huì )發(fā)現我們使用date函數獲取的日期都與中國時(shí)間有8小時(shí)區別了,那?這個(gè)時(shí)區問(wèn)題要如何解決呢?下面本人整理了一些關(guān)于php時(shí)區設置方法,有需要的朋友可進(jìn)入參考.
時(shí)區劃分
整個(gè)地球分為24個(gè)時(shí)區,每個(gè)時(shí)序都有自己的本地時(shí)間,同一時(shí)間,每個(gè)時(shí)區的本地時(shí)間相差1到23個(gè)小時(shí),例如,英國倫敦本地時(shí)間與北京本地時(shí)間相差8個(gè)小時(shí),在國際無(wú)線(xiàn)電通信領(lǐng)域,使用一個(gè)統一的時(shí)間,稱(chēng)為通用協(xié)調時(shí)間(UTC,Universal Time Coordinated),UTC與格林威治標準時(shí)間(GMT,Greenwich Mean Time)相同,都與英國倫敦的本地時(shí)間相同
時(shí)區設置
由于PHP5.0對data()函數進(jìn)行?重寫(xiě),因此,目前的日期時(shí)間函數比系統時(shí)間少8個(gè)小時(shí)。在PHP語(yǔ)言中默認設置的是標準的格林威治時(shí)間(即采用的是零時(shí)區),所以要獲取本地當前的時(shí)間必須更改PHP語(yǔ)言中的時(shí)區設置。
更改PHP語(yǔ)言中的時(shí)區設置有兩種方法:
(1)修改php.ini文件中的設置,找到[date]下的“;date.timezone=”選項,將其修改為“date.timezone=Asia/Hong_Kong”,然后重新啟動(dòng)Apache服務(wù)器。
修改PHP.ini這個(gè)文件,找到date.timezone這行,去掉前面的分號,改成:
date.timezone = Asia/Shanghai
修改 .htaccess文件,修改.htaccess文件有兩種辦法,下面的兩條語(yǔ)句只要有一條即可:
php_value date.timezone Asia/Shanghai
SetEnv TZ Asia/Shanghai
(2)在應用程序中,在使用時(shí)間日期函數之前添加如下函數:
date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亞洲/上海
date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'為“亞洲/重慶”
date_default_timezone_set('PRC');//其中PRC為“中華人民共和國”
i ni_set('date.timezone','Etc/GMT-8');
ini_set('date.timezone','PRC');
ini_set('date.timezone','Asia/Shanghai');
ini_set('date.timezone','Asia/Chongqing');
date_default_timezone_set('PRC');
//PRC為中華人民共和國時(shí)區
//或者
<?php
date_default_timezone_set("Asia/Kolkata");
echo date('d-m-Y H:i:s'); //Returns IST
?>
參數為PHP可識別的時(shí)區名稱(chēng),如果時(shí)區名稱(chēng)PHP無(wú)法識別,則系統采用UTC時(shí)區,在PHP手冊中提供了各個(gè)時(shí)區名稱(chēng)列表,其中,設置我國北京時(shí)間可以使用的時(shí)區包括:PRC(中華人民共和國)、Asia/Chongqing(重慶)、Asia/Shanghai(上海)或者Asia/Urumqi(烏魯木齊),這幾個(gè)時(shí)區名稱(chēng)等效的.
設置完成后,date()函數便可以正常使用,不會(huì )再出現時(shí)差問(wèn)題.
輸出系統的當前時(shí)間:
上面是一種設置系統當前時(shí)間的方法,在這里將采用另外一種方式設置系統當前的時(shí)間,即直接在date()函數之前通過(guò)date_default_timezone_set()函數設置系統的時(shí)區,并輸出系統當前的日期和時(shí)間,代碼如下:
<?php
echo "UTC時(shí)間:".date("Y-m-d H:i:s"); //顯示默認的UTC時(shí)間
date_default_timezone_set("PRC"); //使用中華人民共和國的時(shí)區
echo "<br>";
echo "北京時(shí)間:".date("Y-m-d H:i:s"); //輸出北京時(shí)間
echo "<br>";
echo "中文時(shí)間:".date("Y年m月d日 H時(shí)i分s秒"); //輸出中文格式時(shí)間
echo "<br>"; //開(kāi)源軟件:phpfensi.com
echo "當前時(shí)區:".date_default_timezone_get(); //獲取當前時(shí)區
?>
測試,代碼如下:
<?php
date_default_timezone_set(‘Etc/GMT’);
//在輸出時(shí)間之前設置時(shí)區,Etc/GMT為時(shí)間標準時(shí)間
echo(time()); //開(kāi)源軟件:phpfensi.com
echo(‘
’);
echo date(‘Y-m-d H:i:s’, time());
echo(‘
’);
echo gmdate (“Y-m-d H:i:s”, time());
echo(‘
’);
date_default_timezone_set(‘PRC’);
//在輸出時(shí)間之前設置時(shí)區,PRC為中華人民共和國
echo(time());
echo(‘
’);
echo date(‘Y-m-d H:i:s’, time());
echo(‘
’);
echo gmdate (“Y-m-d H:i:s”, time());
?>
//結果:
1276257131
2010-06-11 11:52:11
2010-06-11 11:52:11
1276257131
2010-06-11 19:52:11
2010-06-11 11:52:11
結論:time():標準時(shí)間戳
指返回自從 Unix 紀元(格林威治時(shí)間 1970 年 1 月 1 日 00:00:00)到當前時(shí)間(指的是當前GMT標準時(shí)間)的秒數,它的值跟php系統設置的時(shí)區無(wú)關(guān).
date():返回的是當前 GMT標準時(shí)間的本地化時(shí)間的“自定義格式”時(shí)間,跟php系統設置的時(shí)區有關(guān).
gmdate():返回的是當前 GMT標準時(shí)間的“自定義格式”時(shí)間,跟php系統設置的時(shí)區無(wú)關(guān).
unix時(shí)間戳:指的是當前(GMT標準)時(shí)間離unix紀元時(shí)間(1970-01-01 00:00:00)的秒數.
date_default_timezone_set(‘Etc/GMT’);
//在輸出時(shí)間之前設置時(shí)區,Etc/GMT為時(shí)間標準時(shí)間
echo(strtotime(’1970-01-01 08:00:00′));
echo(‘
’);
date_default_timezone_set(‘PRC’);
//在輸出時(shí)間之前設置時(shí)區,PRC為中華人民共和國
echo(strtotime(’1970-01-01 08:00:00′));
?>
//測試結果:
28800
0
strtotime(a):當前時(shí)間的GMT標準時(shí)間的unix時(shí)間戳,如果當前php系統的設置的時(shí)區不是GMT標準時(shí)區,則在應用strtotime(a)時(shí),系統會(huì )自動(dòng)把時(shí)間a折算成相?的GMT標準時(shí)間,然后計算這個(gè)時(shí)間的unix時(shí)間戳,跟php系統設置的時(shí)區有關(guān).
售前咨詢(xún)
售后咨詢(xún)
備案咨詢(xún)
二維碼
TOP