網頁

2017年3月31日 星期五

php 時間涵數

date($format);
自 php 5.1版後,可使用下面涵式設定默認時區。
date_default_timezone_set('UTC');
php5.3版後,若系統沒設定時區,則php會顯示出錯誤訊息。
你可以先嚐試一下警告訊息的頁面(假設你是以本機架設appserv教學),安裝好 appserv 後,系統並沒有預設時區。因此你直接打入下面指令,則系統會出現警告訊息(php5.3版後):
date_timezone_05

你可以查尋 phpinfo 檔案 看是否沒有設定預設時區:
date_timezone_01

由訊息可知,你必須先給你的主機設定一個預設時區,系統才有依循的標準,設定系統內定時區的方式有三種:
  • 第一種方式:設定你的 php.ini 檔案,若是依照本站的appserv教學,php.ini 檔案有兩處,須看你是使用php5或是php7而不同,php5 的 php.ini 位於 C:\AppServ\php5\php.ini,而 php7 的 php.ini 則位於 C:\AppServ\php7\php.ini
    請找到下面這段字
    date_timezone_02;date.timezone =       這行字去除掉 前面的分號 ;  然後再把時區加入(這裡設時區為亞洲台北,時區不能亂設有設定的標準,後面會教),改成如下後存檔後重啟 Apache
    date_timezone_03date.timezone = Asia/Taipei
    修改成上面那段文字後,程式運作便正常了,再查看一下 phpinfo 也已出現預設時區
  • 第二種方式:倘若你是使用虛擬主機,沒有設定 php.ini 的權限,你就必須在自己根目錄下新增一個 .htaccess 檔案,檔案內容填寫如下文字後存檔:
    php_value date.timezone 'Asia/Taipei'
  • 第三種方式:如果再沒有上面權限(這還是虛主嗎?.....),也不打緊,直接用 php 指令寫在時間涵數上面(php5.1版後),指令如下:

    如此也可正常執行了

由上可知,你必須先設定好你的系統預設的時區,建議修改 php.ini 或使用 .htaccess 設定時區的方式,可免去每次設定時區時都必須加上 date_default_timezone_set('UTC');

上面所提到的預設時區指令
date_default_timezone_set('UTC');
此為世界標準時區(UTC),要如何查尋此時區內容共有那些呢?可以由時區列表得到內容
timezone_identifiers_list();
使用下面指令就可以列出世界各地的時區代碼囉!
由上面程式可找到台灣的代碼 Asia/Taipei 就是 亞洲 / 台北
或使用 echo date("e"); 指令也可以顯示出 本地 時區代碼(php5.1版後)

使用時間函數可得知世界各地(限地球,火星就沒辦法了...)目前的時間(php5.1版後):

接下來看 date("d-m-Y H:i:s")  這裡面的 d m Y H i s 這些字母又代表什麼意思?此為時間的格式字串
請看一下列表(請注意大小寫有別):
字串概述返回實例


d日,月份中的第幾日,有前導 0 的2位數字表示,範圍 01~3103 、11
j日,月份中的第幾日,沒有前導 0 的2位數字表示,範圍 1~315、10
D3個英文字母的星期幾,範圍 Mon ~ SunMon 、Sun
l (英文小寫L) 完整的星期幾,範圍 Sunday ~ SaturdayMonday
N ISO-8601 格式數字表示的星期中的第幾天(PHP 5.1.0 新加),範圍 1~7 1 、3
S 每月天數後面的英文後綴,2 個字符st、nd、rd 或者 th
可以和 j 一起用
w 星期中的第幾天,數字表示,範圍 0(星期天) ~6(星期六)2、5
z 年份中的第幾天,範圍 0~36510、100、200


W ISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的) 5(該年的第5週)


F 英文完整的月份,範圍 January 到 December  June
m數字表示的月份,有前導 0,範圍 01~12 01、02
n數字表示的月份,沒有前導 0,範圍 1~121、5、11
M英文月份的縮寫(僅顯示3個英文字母),範圍 Jan 到 Dec Jan 、Jun
t該月份全部的天數,範圍 28~31 30 、31


L是否為閏年,範圍 0 或 1如果是閏年顯示 1,否則顯示 0
Y4 位數字完整表示的年份2016、1989
y2 位數字表示的年份16、90
時間

a英文小寫的上午和下午,am或pmam、pm
A英文大寫的上午和下午,AM或PMAM、PM
B網際網路時間(Swatch .beat),範圍 000~999840
g小時,12 小時格式,沒有前導0,範圍 1~121、2、3
h小時,12 小時格式,有前導0,範圍 01~1201、02、03
G小時,24 小時格式,沒有前導0,範圍0~231、10、21
H小時,24 小時格式,有前導0,範圍00~2302、08、15
i分,有前導0的分鐘數,範圍 00~5901、02、10、20
s秒,有前導 001、02、10、20
時區

e時區標識(PHP 5.1.0 新加)UTC、 Asia/Taipei
I是否為夏令時間如果是夏令時顯示 1,否則為 0
O與格林威治時間相差的時數,較快用 + ,較慢用 -+0800、-0400
P與格林威治時間(GMT)的時差,小時和分鐘之間有冒號分隔(PHP 5.1.3 新加)+08:00、-04:00
完整時間

cISO 8601 格式的日期(PHP 5 新加)2016-06-05T16:06:31-04:00
rRFC 822 格式的日期Sun, 05 Jun 2016 16:08:36 -0400
U從西元 1970 年 1月1日的 00:00:00 開始到現在的秒數1465157467

由上表內的英文字母代入 date("") 內,便可以顯示出你想要的時間的資訊了,下面有幾個簡單範例,請自己實作看看。

時間戳記

根據給予的參數返回 Unix 時間戳記。時間戳記是一個長整數, 西元 1970年1月1日00:00:00 到給與參數時間的全部秒數。
第一種方式
mktime
(hour,minute,second,month,day,year); //mktime(時,分,秒,月,日,年);
第二種方式
date("U"); //直接取得「目前」時間戳記
第三種方式
time(); //使用此函數也可以取得「目前」時間戳記
範例:

將時間戳記轉回日期的格式:

date('Y-m-d H:i:s',$t);
' Y-m-d H:i:s ':此為你想轉換回時間格式的樣式,可自行定義
$t :自定義的時間戳記數字
範例:

時間相加相減:

以時間戳記做加減運算,再轉回日期格式
strtotime();
此涵數內的加減時間必須使用英文:
如:
strtotime("+1 day"); 則表示一天後的時間戳
strtotime("-1 day"); 則表示一天前的時間戳
strtotime("+1 year"); 則表示一年後
strtotime("-1 year"); 則表示一年前
計算strtotime 內的涵數單位表示
英文字所代表意義
year
month
week
day
hour
minute
seconds
範例:

也可使用 mktime(); 涵數做時間的加減(小學生愛用這種,因為英文差咩 = =)
date("Y-m-d" , mktime(0,0,0,date("m"),date("d"),date("Y")) );
直接使用 mktime(0,0,0,date("m"),date("d"),date("Y")) 這裡的資料做加減即可
例如:加一天就是
mktime(0,0,0,date("m"),date("d") + 1 ,date("Y"))
因為這也是使用時間戳,因此要使用 date() 轉回日期格式,因此整個寫法如下:
echo date("Y-m-d" , mktime(0,0,0,date("m"),date("d")+1,date("Y")) );
實際飯粒(寶寶餓了...)

其他常用的計算時間的程式範例:

比較時間範例


程式執行花費的時間範例


計算兩個日期時間 相差幾天 幾個小時 幾分鐘  幾秒


陽曆轉換陰曆日期,及天干地支等

這不知道是那位高人寫出來的(作者真是豹子頭....高手高手高高手....)由於內容是由模組所組成,小學生將它包在壓縮檔內,請自行取回(煙酒煙酒)研究研究!
檔案下載回去後打開 index.php 檔案內有詳細使用說明及程式引用說明

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。