1. date_default_timezone_set
date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区
在php中只用 mktime() 函数时有时会报错,解决办法是在<?php 后加一行
date_default_timezone_set('Asia/ShangHai');
2. date内置函数参数列表
date — 格式化一个本地时间/日期
说明:
string date ( string
$format
[, int $timestamp
] )返回将整数 timestamp
按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp
是可选的,默认值为 time()。
下面表格引用自php官方手册,放在这里方便查阅:
d | 月份中的第几天,有前导零的 2 位数字 | 01 到 31 |
D | 星期中的第几天,文本表示,3 个字母 | Mon 到 Sun |
j | 月份中的第几天,没有前导零 | 1 到 31 |
l(“L”的小写字母) | 星期几,完整的文本格式 | Sunday 到 Saturday |
N | ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) | 1(表示星期一)到 7(表示星期天) |
S | 每月天数后面的英文后缀,2 个字符 | st,nd,rd 或者 th。可以和 j 一起用 |
w | 星期中的第几天,数字表示 | 0(表示星期天)到 6(表示星期六) |
z | 年份中的第几天 | 0 到 366 |
星期 | --- | --- |
W | ISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的) | 例如:42(当年的第 42 周) |
月 | --- | --- |
F | 月份,完整的文本格式,例如 January 或者 March | January 到 December |
m | 数字表示的月份,有前导零 | 01 到 12 |
M | 三个字母缩写表示的月份 | Jan 到 Dec |
n | 数字表示的月份,没有前导零 | 1 到 12 |
t | 给定月份所应有的天数 | 28 到 31 |
年 | --- | --- |
L | 是否为闰年 | 如果是闰年为 1,否则为 0 |
o | ISO-8601 格式年份数字。这和 Y 的值相同,只除了如果 ISO 的星期数(W)属于前一年或下一年,则用那一年。(PHP 5.1.0 新加) | Examples: 1999 or 2003 |
Y | 4 位数字完整表示的年份 | 例如:1999 或 2003 |
y | 2 位数字表示的年份 | 例如:99 或 03 |
时间 | --- | --- |
a | 小写的上午和下午值 | am 或 pm |
A | 大写的上午和下午值 | AM 或 PM |
B | Swatch Internet 标准时 | 000 到 999 |
g | 小时,12 小时格式,没有前导零 | 1 到 12 |
G | 小时,24 小时格式,没有前导零 | 0 到 23 |
h | 小时,12 小时格式,有前导零 | 01 到 12 |
H | 小时,24 小时格式,有前导零 | 00 到 23 |
i | 有前导零的分钟数 | 00 到 59> |
s | 秒数,有前导零 | 00 到 59> |
时区 | --- | --- |
e | 时区标识(PHP 5.1.0 新加) | 例如:UTC,GMT,Atlantic/Azores |
I | 是否为夏令时 | 如果是夏令时为 1,否则为 0 |
O | 与格林威治时间相差的小时数 | 例如:+0200 |
P | 与格林威治时间(GMT)的差别,小时和分钟之间有冒号分隔(PHP 5.1.3 新加) | 例如:+02:00 |
T | 本机所在的时区 | 例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。 |
Z | 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 | -43200 到 43200 |
完整的日期/时间 | --- | --- |
c | ISO 8601 格式的日期(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
r | RFC 822 格式的日期 | 例如:Thu, 21 Dec 2000 16:01:07 +0200 |
U | 从 Unix 纪元(January 1 1970 00:00:00 GMT)开始至今的秒数 | 参见 time() |
eg:date()函数现实一个时间
1 <?php 2 echo date("Y-m-d H:i:s",time()); 3 echo "<br />"; 4 echo date("Y-m-d H:i:s",mktime(13,55,0,12,6,2017)); 5 echo "<br />";
结果显示为:
参数中识别不了的元素会保留下来,用js需要一大串代码的功能,php一行代码就能实现!!!
3. php实现两个时间的差值和简单日历显示
1 <meta charset="UTF-8" /> 2 <?php 3 date_default_timezone_set("Asia/ShangHai"); 4 echo "<h1>自定义一个函数,返回一个时间差(XX天XX小时XX分钟XX秒)</h1>"; 5 6 function get_time_diff($time1=0,$time2=0){ 7 if($time1==0&&$time2==0){ 8 $diff = time(); 9 }elseif($time1>0&&$time2==0){ 10 $diff = $time1; 11 }else{ 12 $diff = abs($time1-$time2); 13 } 14 15 $s = $diff%60; 16 $i = floor($diff%3600/60); 17 $h = floor($diff%(3600*24)/3600); 18 $d = floor($diff/(3600*24)); 19 20 return "<p>".$d."天".$h."小时".$i."分钟".$s."秒</p>"; 21 22 } 23 echo date("Y-m-d H:i:s"); 24 echo get_time_diff(); 25 echo get_time_diff(mktime(0,0,0,1,2,1970)); 26 echo get_time_diff(mktime(0,0,0,12,8,2017),mktime(0,0,0,12,5,2017)); 27 28 echo "<h1>自定义一个函数,输出一个日历</h1>"; 29 30 function calendar($time=0){ 31 $time = $time>0?$time:time(); 32 33 $days = date("t",$time); //当月的总天数 34 35 $first_day = date("w",mktime(0,0,0,date("n",$time),1,date("Y",$time))); //当月1号是星期几 36 37 $rows = ceil(($days+$first_day)/7); //日历动态部分的行数 38 39 $count = 1; 40 41 $current_day = date("j",$time); //当天是几号 42 43 echo "<table border='1'>"; 44 echo "<tr><th colspan='7'>".date("Y年m月",$time)."</th></tr>"; 45 echo "<tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>"; 46 for($i=1;$i<=$rows;$i++){ 47 echo "<tr>"; 48 for($j=0;$j<7;$j++){ 49 50 if( ($i==1&&$j<$first_day) || ($i==$rows&&$count>$days) ){ 51 echo "<td> </td>"; 52 }else{ 53 if($count==$current_day){ 54 echo "<td style='color:red;'>".$count."</td>"; 55 }else{ 56 echo "<td>".$count."</td>"; 57 } 58 $count++; 59 } 60 61 } 62 echo "</tr>"; 63 } 64 echo "</table>"; 65 } 66 calendar(); 67 calendar(mktime(0,0,0,10,1,2008));
运行结果如下: