date($format);
自 php 5.1版後,可使用下面涵式設定默認時區。
date_default_timezone_set('UTC');
php5.3版後,若系統沒設定時區,則php會顯示出錯誤訊息。
你可以先嚐試一下警告訊息的頁面(假設你是以
本機架設appserv教學),安裝好 appserv 後,系統並沒有預設時區。因此你直接打入下面指令,則系統會出現警告訊息(
php5.3版後):
|
<?php
//php 時間涵數
echo '時間:'.date('d-m-y H:i:s');
|
你可以查尋 phpinfo 檔案 看是否沒有設定預設時區:
由訊息可知,你必須先給你的主機設定一個預設時區,系統才有依循的標準,設定系統內定時區的方式有三種:
- 第一種方式:設定你的 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 = 這行字去除掉 前面的分號 ; 然後再把時區加入(這裡設時區為亞洲台北,時區不能亂設有設定的標準,後面會教),改成如下後存檔後重啟 Apache
date.timezone = Asia/Taipei
修改成上面那段文字後,程式運作便正常了,再查看一下 phpinfo 也已出現預設時區
- 第二種方式:倘若你是使用虛擬主機,沒有設定 php.ini 的權限,你就必須在自己根目錄下新增一個 .htaccess 檔案,檔案內容填寫如下文字後存檔:
php_value date.timezone 'Asia/Taipei'
- 第三種方式:如果再沒有上面權限(這還是虛主嗎?.....),也不打緊,直接用 php 指令寫在時間涵數上面(php5.1版後),指令如下:
|
<?php
//php 時間涵數
date_default_timezone_set('Asia/Taipei');//設定時區為台北
echo '時間:'.date("d-m-y H:i:s");
|
如此也可正常執行了
由上可知,你必須先設定好你的系統預設的時區,建議修改 php.ini 或使用 .htaccess 設定時區的方式,可免去每次設定時區時都必須加上 date_default_timezone_set('UTC');
上面所提到的預設時區指令
date_default_timezone_set('UTC');
此為世界標準時區(UTC),要如何查尋此時區內容共有那些呢?可以由時區列表得到內容
timezone_identifiers_list();
使用下面指令就可以列出世界各地的時區代碼囉!
|
<?php
//時區代碼查尋
$arr = timezone_identifiers_list();
foreach($arr as $value){
echo $value.'<br />';
}
//或直接印出陣列內容查看也可以 如下
//print_r($arr);
|
由上面程式可找到台灣的代碼 Asia/Taipei 就是 亞洲 / 台北
或使用 echo date("e"); 指令也可以顯示出 本地 時區代碼(php5.1版後)
使用時間函數可得知世界各地(限地球,火星就沒辦法了...)目前的時間(php5.1版後):
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php
//php 時區 範例
date_default_timezone_set('UTC');
echo '世界標準時間:'.date("d-m-Y H:i:s").'<br />';
date_default_timezone_set('Asia/Taipei');
echo '台灣台北:'.date("d-m-Y H:i:s").'<br />';
date_default_timezone_set('America/New_York');
echo '美國紐約:'.date("d-m-Y H:i:s").'<br />';
date_default_timezone_set('Asia/Tokyo');
echo '日本東京:'.date("d-m-Y H:i:s").'<br />';
|
接下來看 date("d-m-Y H:i:s") 這裡面的 d m Y H i s 這些字母又代表什麼意思?此為時間的格式字串
請看一下列表(請注意大小寫有別):
字串 | 概述 | 返回實例 |
日 |
|
|
d | 日,月份中的第幾日,有前導 0 的2位數字表示,範圍 01~31 | 03 、11 |
j | 日,月份中的第幾日,沒有前導 0 的2位數字表示,範圍 1~31 | 5、10 |
D | 3個英文字母的星期幾,範圍 Mon ~ Sun | Mon 、Sun |
l (英文小寫L) | 完整的星期幾,範圍 Sunday ~ Saturday | Monday |
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~365 | 10、100、200 |
週 |
|
|
W | ISO-8601 格式年份中的第幾周,每週從星期一開始(PHP 4.1.0 新加的) | 5(該年的第5週) |
月 |
|
|
F | 英文完整的月份,範圍 January 到 December | June |
m | 數字表示的月份,有前導 0,範圍 01~12 | 01、02 |
n | 數字表示的月份,沒有前導 0,範圍 1~12 | 1、5、11 |
M | 英文月份的縮寫(僅顯示3個英文字母),範圍 Jan 到 Dec | Jan 、Jun |
t | 該月份全部的天數,範圍 28~31 | 30 、31 |
年 |
|
|
L | 是否為閏年,範圍 0 或 1 | 如果是閏年顯示 1,否則顯示 0 |
Y | 4 位數字完整表示的年份 | 2016、1989 |
y | 2 位數字表示的年份 | 16、90 |
時間 |
|
|
a | 英文小寫的上午和下午,am或pm | am、pm |
A | 英文大寫的上午和下午,AM或PM | AM、PM |
B | 網際網路時間(Swatch .beat),範圍 000~999 | 840 |
g | 小時,12 小時格式,沒有前導0,範圍 1~12 | 1、2、3 |
h | 小時,12 小時格式,有前導0,範圍 01~12 | 01、02、03 |
G | 小時,24 小時格式,沒有前導0,範圍0~23 | 1、10、21 |
H | 小時,24 小時格式,有前導0,範圍00~23 | 02、08、15 |
i | 分,有前導0的分鐘數,範圍 00~59 | 01、02、10、20 |
s | 秒,有前導 0 | 01、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 |
完整時間 |
|
|
c | ISO 8601 格式的日期(PHP 5 新加) | 2016-06-05T16:06:31-04:00 |
r | RFC 822 格式的日期 | Sun, 05 Jun 2016 16:08:36 -0400 |
U | 從西元 1970 年 1月1日的 00:00:00 開始到現在的秒數 | 1465157467 |
由上表內的英文字母代入 date("") 內,便可以顯示出你想要的時間的資訊了,下面有幾個簡單範例,請自己實作看看。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
//php時間函 範例
date_default_timezone_set('Asia/Taipei');//設定時區為台北(改變時區後,下面資料會隨著改變)
//date_default_timezone_set('America/New_York');
echo '今天是 ' . date('Y/m/d') . '<br />';
echo '今天是 ' . date('Y.m.d') . '<br />';
echo '今天是 ' . date('Y-m-d') . '<br />';
echo '今天是 ' . date('l') .'<br />';
echo '今天是 西元 ' . date("Y") .' 年 ' . date("m") . ' 月 ' . date("j") . ' 日 <br />';
echo date("今天是 西元 Y 年 m 月 j 日") .'<br />';
echo '今天是今年的第 ' . date("W") . ' 個星期,今年的第 ' . date("z") . ' 天 <br />';
if(date("L") == '1'){echo '今年是潤年';}else{echo '今年不是潤年';}
echo '<br />';
echo '今天是 ' . date("jS") .' 日 <br />';
//自動更新版權
echo 'Copyright © 2016 - ' . date("Y") . '<br />';
echo '現在時間: ' . date('a h:i:s') .'<br />';
echo '現在時間: ' . date('A H:i:s') .'<br />';
|
時間戳記
根據給予的參數返回 Unix 時間戳記。時間戳記是一個長整數, 西元 1970年1月1日00:00:00 到給與參數時間的全部秒數。
第一種方式
mktime(hour,minute,second,month,day,year); //mktime(時,分,秒,月,日,年);
第二種方式
date("U"); //直接取得「目前」時間戳記
第三種方式
time(); //使用此函數也可以取得「目前」時間戳記
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php
//date_default_timezone_set('Asia/Taipei');//設定時區(最好是設在php.ini內 此行便可省略)
//取得目前時間
$yy = date("Y"); //年
$mo = date("m"); //月
$dd = date("d"); //日
$hh = date("H"); //時
$mm = date("i"); //分
$ss = date("s"); //秒
//以 mktime() 方式 轉換成時間戳
echo '目前時間:'.$yy.'-'.$mo.'-'.$dd.' '.$hh.':'.$mm.':'.$ss.'<br />';
echo '轉成時間戳記為:'.mktime($hh,$mm,$ss,$mo,$dd,$yy).'<br />';
//直接使用 date("U") 取得時間戳
echo '目前時間戳記:'.date("U").'<br />';
//直接使用 time() 涵數取得時間戳
echo '目前時間戳記:'.time().'<br />';
//轉換 2016年 3 月2日 1點 50 分 30 秒 變成時間戳記
//mktime(時,分,秒,月,日,年) ;//時間戳記的轉換方式,將時間(自設定)代入到 mktime() 函數即可
$d_time = mktime(1,50,30,3,2,2016);
echo '2016-03-02 01:50:30 時間戳為:'.$d_time.'<br />';
echo '2016-03-02 01:50:30 時間戳為:'.mktime(1,50,30,3,2,2016);
|
將時間戳記轉回日期的格式:
date('Y-m-d H:i:s',$t);
' Y-m-d H:i:s ':此為你想轉換回時間格式的樣式,可自行定義
$t :自定義的時間戳記數字
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?php
$time_now = time();
//取目前時間戳
echo '目前時間戳為:' . $time_now .'<br />';
//將目前時間戳記轉換回日期格式
echo '目前時間:'. date('Y-m-d H:i:s',$time_now) .'<br />';
echo '目前時間:'. date('y/F/jS A: g i s',$time_now) .'<br />';
echo '目前時間:'. date('H 點 i 分 s 秒',$time_now) .'<br />';
//將 自定義的時間戳記轉換成 日期格式
$t = '132456789';//自定義數字(整數)
echo '自定義時間轉換:'. date('Y-m-d H:i:s',$t) .'<br />';
|
時間相加相減:
以時間戳記做加減運算,再轉回日期格式
strtotime();
此涵數內的加減時間必須使用英文:
如:
strtotime("+1 day"); 則表示一天後的時間戳
strtotime("-1 day"); 則表示一天前的時間戳
strtotime("+1 year"); 則表示一年後
strtotime("-1 year"); 則表示一年前
計算strtotime 內的涵數單位表示
英文字 | 所代表意義 |
year | 年 |
month | 月 |
week | 週 |
day | 天 |
hour | 時 |
minute | 分 |
seconds | 秒 |
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<?php
//時間的相加減
echo strtotime("now"), "<br />";//目前時間戳記
echo strtotime("+1 week"), "<br />";//1星期後的時間戳記
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "<br />";//1星期2天4小時2秒後的時間戳
echo strtotime("next Thursday"), "<br />";//離目前最近的後一個星期四的時間戳(離目前最近的星期四,未必為下星期四)
echo strtotime("last Monday"), "<br />";//離目前最近的上個星期一的時間戳(離目前最近的前個星期一,未必上星期一)
//相加減後,將其結果轉換成日期格式
echo '目前時間:'. date('Y-m-d H:i:s A',strtotime("now"));//轉換目前時間為日期格式
echo '<br />';
//1星期後 未指定日期則會以目前時間為基準
echo '一星期後的時間:'. date('Y-m-d H:i:s A',strtotime("+1 week"));
echo '<br />';
//給予特定時間然後計算該時間後的一星期後的日期
$date_day = '2016-03-30';//指定要計算的時間
echo $date_day.'後一週日期為:';
//將指定日期代入計算
echo date('Y-m-d H:i:s A',strtotime($date_day . "+1 week"));
echo '<br />';
//1星期2天4小時2秒後
echo '1星期又2天4小時2秒後的日期為:';
echo date('Y-m-d H:i:s A',strtotime("+1 week 2 days 4 hours 2 seconds"));
echo '<br />';
//同理若指定日期
echo $date_day.' 加一星期又2天4小時2秒後的日期為:';
echo date('Y-m-d H:i:s A',strtotime($date_day . "+1 week 2 days 4 hours 2 seconds"));
echo '<br />';
//後一個星期四的日期
echo '後一個星期四的日期為:';//注意是離現在最近的星期四,如今天如果是星期三 , 最近的後一個星期四 就是明天
echo date('Y-m-d H:i:s A',strtotime("next Thursday"));
echo '<br />';
//前一個星期一的日期
echo '前一個星期一的日期為:';//注意是離現在最近的前一個星期一 未必是上星期一,假如今天是星期二 那前一個星期一就是昨天
echo date('Y-m-d H:i:s A',strtotime("last Monday"));
echo '<br />';
|
也可使用 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")) );
實際飯粒(寶寶餓了...)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<?php
//目前時間
echo '目前時間:'.date("Y-m-d H:i:s A");
echo '<br />';
//十天後
echo date("Y-m-d" , mktime(0,0,0,date("m"),date("d")+10,date("Y")) );
echo '<br />';
//十天前
echo date("Y-m-d" , mktime(0,0,0,date("m"),date("d")-10,date("Y")) );
echo '<br />';
//三月後
echo date("Y-m-d" , mktime(0,0,0,date("m")+3,date("d"),date("Y")) );
echo '<br />';
//三月前
echo date("Y-m-d" , mktime(0,0,0,date("m")-3,date("d"),date("Y")) );
echo '<br />';
//一個月前
echo date('Y/m/d',mktime(date("H"),date("i"),date("s"),date("m")-1,date("d"),date("Y")));
echo '<br />';
//一個月後
echo date('Y/m/d',mktime(date("H"),date("i"),date("s"),date("m")+1,date("d"),date("Y")));
echo '<br />';
//500秒前
echo date('Y/m/d H:i:s A',mktime(date("H"),date("i"),date("s")-500,date("m")+1,date("d"),date("Y")));
echo '<br />';
//500秒後
echo date('Y/m/d H:i:s A',mktime(date("H"),date("i"),date("s")+500,date("m")+1,date("d"),date("Y")));
echo '<br />';
|
其他常用的計算時間的程式範例:
比較時間範例
|
<?php
//時間差比較
$x1 = date('Y-m-d h:i:s');//目前時間(也可自定義)
$x2 ='2017-11-29 21:07:00';//自定義比較時間
echo 'x1 時間為:'.$x1.'<br>';
echo 'x2 時間為:'.$x2.'<br>';
if(strtotime($x1) < strtotime($x2)){
echo 'x1 早於 x2';
}else{
echo 'x2 早於 x1';
}
|
程式執行花費的時間範例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php
//microtime(true);//返回目前 Unix 時間戳與微秒數
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
//計時開始的時間
$time_start = microtime_float();
// 讓程式停100毫秒
usleep(100);
//計時結束時間
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "執行程式時間為: $time 秒 ";
|
計算兩個日期時間 相差幾天 幾個小時 幾分鐘 幾秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
//計算兩個日期時間 相差幾天又幾個小時又幾分鐘又幾秒
$s_date="2016-05-17 02:11:58";
$e_date="2016-10-19 20:02:03";
/*
1天=24小時=1440分鐘=86400秒
1小時=60分鐘=3600秒
1分鐘=60秒
*/
echo '兩個日期時間 相差 幾天/幾個小時/幾分鐘/幾秒<br/>';
$second1=floor((strtotime($e_date)-strtotime($s_date)));//兩個日期時間 相差 幾秒
echo floor($second1/86400).'天<br/>';
echo floor(($second1%86400)/3600).'小時<br/>';
echo floor((($second1%86400)%3600)/60).'分鐘<br/>';
echo floor((($second1%86400)%3600)%60).'秒<br/>';
|
陽曆轉換陰曆日期,及天干地支等
這不知道是那位高人寫出來的(作者真是豹子頭....高手高手高高手....)由於內容是由模組所組成,小學生將它包在壓縮檔內,請自行取回(煙酒煙酒)研究研究!
檔案下載回去後打開 index.php 檔案內有詳細使用說明及程式引用說明
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。