php时间函数整理

时间:2022-02-24 19:15:11

PHP中的时间函数有这么些:
(1)date
用法: date(格式,[时间]);
如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:
U 替换成从一个起始时间(好象是1970年1月1日)以来的秒数

Y 替换成4位的年号.
y 替换成2位的年号.
F 替换成月份的英文全称.
M 替换成月份的英文简称.
m 替换成月份数.
z 替换成从当年1月1日以来的天数.
d 替换成日数.
l 替换成星期几的英文全称.
D 替换成星期几的英文简称.
w 替换成星期几(数字).
H 替换成小时数(24小时制).
h 替换成小时数(12小时制).
i 替换成分钟数.
s 替换成秒数.
A 替换成"AM"或"PM".
a 替换成"am"或"pm".
S 替换成序数字后缀,例如:"st","nd","rd","th".

函数返回作过了替换的格式串.
 
(2)getdate(时间)
返回一个哈希表,各下标是:
"seconds" -- 秒数
"minutes" -- 分数
"hours" -- 小时数
"mday" -- 日数
"mon" -- 月份数
"year" -- 年号
"yday" -- 1月1日以来的天数
"weekday" -- 星期几,英文全称
"month" -- 月份,英文全名
(3)gmdate
与date类似,但先将时间转换成格林威治标准时.
(4)mktime
用法:
mktime(小时数,分数,秒数,月,日,年); 返回一个时间值,可用于其他函数.
(5)time()
用法:
time(); 返回1970年1月1日零点以来的秒数.
(6)microtime()
用法:
microtime(); 返回一个字符串,用空格分成两部分,后一部分相当于time()
的返回值,前一部分是微秒数.
(7)checkdate
checkdate(月,日,年); 返回逻辑真或逻辑假. 如果:
年在1900和32767之间(包括1900与32767);
月在1到12之间;
日在该月的允许日数范围内(考虑了闰年);

则返回逻辑真.
(8)set_time_limit
用法:
set_time_limit(秒数);
规定从该句运行时起程序必须在指定秒数内运行结束, 超时则程序出错退出.

1· by:
PHP中所有函数都是UNIX纪元的,即从1970年1月1日开始的。日期是从这个时候开始的秒数。当一个函数调用从这时候计的秒数时,就把它当作(timestamp)时间戳。

本地时间函数
1. string date(string format,inieger timestamp)

该函数返回一个表示时间的字符串,是由string format 控制的。
如:

<?

print(date("Y年 m月d日");//输出当前,年月日.

print(date("Y年 m月d日",60*60*24*365*10);//输出1980年1月1日.

?>

也许你会问,怎麽没有timestamp呢?若timestamp为空时,或不写时,表示使用当前时间一刻timestamp.

表示年份的控制符: Y---四位的年份 y---两位的年份

表示月份的控制符: m---从1-12的月份 F---英文月份名 M---简写的月份名

表示日号的控制符: d---前面有0的月份中日期 j--前面没有0的日号

表示星期的控制符: l--英文星期 D--简写的星期

表示小时的控制符: h--从1到12小时 H---从0到23的小时

表示上下午的控制符 a ---am或pm A---AM或PM

表示分钟的控制符: i---取值00-59

另外的 z--一年中的日期

2. array getdate(integer timestamp)

该函数返回一个矩阵.

如:

<?

$current_date=getdate();

print($current_date("hours"));

print($current_date("minutes");

print($current_date("seconds");

?>

说明:

元素 描述

hours 24小时格式的小时

mday 月份中日期

minutes 分钟

mon 数字形式的月份

month 月份全称

seconds 秒数

wday 从0到6的数字形式的星期几

weekday 星期几的名称

year 年份

0 时间戳即从1970年1月1日到现在的秒数

yday 一年中数字形式的日期

3. boolean checkdate(integer month,integer day,integer year)

该函数检查日期是否合法.如:

<?

if(checkdate(2,29,1980))

print("日期合法!n");

?>

4. integer time()

该函数获得当前时间戳.如:

<?

print(time());//输出一大串整数

?>

5. integer mktime(integer hour,integer minutes,integer seconds,integer month, integer day,integer year)

该函数返回给出日期的时间戳,即从1970年1月1日到现在的秒数.

如某参数超出范围,该函数也可以解释它,如13月即为第二年的一月.

如:

<?

$currenthour=date("H");

print("50个小时后为:");

print(date("h:i A l F dS,Y",mktime($currenthour+50)));

print("<br>n");

?>

6. string microtime()

该函数返回一个字符串,由当前时间的毫秒数+空格+从1970年开始的秒数

<?

print("start:microtime()<br>n");

for($index=0;$index<1000;$index++)

print("good!");

print("stop:microtime()<br>n");

?>

还有,各林威治标准时间函数,不常用我就不说了!常用的就这些。

--------------------------------------------------------------------------------
 
2· by:楼主

一个问题举例
$nowdate="1999-08-05" ;

$aa=getdate($nowdate);

$year=$aa['year'];

$month=$aa['mon'];

echo $year."</br>";

echo $month;

为何得到:

1970

1

我希望得到:

1999

8

如何解决?
--------------------------------------------------------------------------------
$nowdate="1999-08-05" ;

$aa=strtotime($nowdate);

$year=date("Y",$aa);

$month=date("n",$aa);

echo $year."</br>";

echo $month;

--------------------------------------------------------------------------------
3· by:

1,年-月-日

echo date('Y-m-j');

2007-02-6
echo date('y-n-j');

07-2-6

大写Y表示年四位数字,而小写y表示年的两位数字;

小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字。

echo date('Y-M-j');

2007-Feb-6

echo date('Y-m-d');

2007-02-06

大写M表示月份的3个缩写字符,而小写m则表示月份的数字(带前导0);

没有大写的J,只有小写j表示月份的日期,无前导o;若需要月份带前导则使用小写d。

echo date('Y-M-j');

2007-Feb-6

echo date('Y-F-jS');

2007-February-6th

大写M表示月份的3个缩写字符,而大写F表示月份的英文全写。(没有小写f)

大写S表示日期的后缀,比如“st”、“nd”、“rd”和“th”,具体看日期数字为何。

小结:

表示年可以用大写的Y和小写y;

表示月可以用大写F、大写M、小写m和小写n(分别表示字符和数字的两种方式);

表示日可以用小写d和小写j,大写S表示日期的后缀。

2,时:分:秒

默认情况下,PHP解释显示的时间为“格林威治标准时间”,与我们本地的时间相差8个小时。

echo date('g:i:s a');

5:56:57 am

echo date('h:i:s A');

05:56:57 AM

小写g表示12小时制,无前导0,而小写h则表示有前导0的12小时制。

当使用12小时制时需要表明上下午,小写a表示小写的“am”和“pm”,大写A表示大写的“AM”和“PM”。

echo date('G:i:s');

14:02:26

大写G表示24小时制的小时数,但是不带前导的;使用大写的H表示带前导的24小时制小时数

小结:

字母g表示小时不带前导,字母h表示小时带前导;

小写g、h表示12小时制,大写G、H表示24小时制。

3,闰年、星期、天

echo date('L');

今年是否闰年:0

echo date('l');

今天是:Tuesday

echo date('D');

今天是:Tue

大写L表示判断今年是否闰年,布尔值,为真返回1,否则为0;

小写l表示当天是星期几的英文全写(Tuesday);

而使用大写D表示星期几的3个字符缩写(Tue)。

echo date('w');
今天星期:2

echo date('W');

本周是全年中的第 06 周

小写w表示星期几,数字形式表示

大写W表示一年中的星期数

echo date('t');

本月是 28 天

echo date('z');

今天是今年的第 36 天

小写t表示当前月份又多少天

小写z表示今天是本年中第几天

4,其他

echo date('T');

UTC

大写T表示服务器的时间区域设置

echo date('I');

0

大写I表示判断当前是否为夏令时,为真返回1,否则为0

echo date('U');

1170769424

大写U表示从1970年1月1日到现在的总秒数,就是Unix时间纪元的UNIX时间戳。

echo date('c');

2007-02-06T14:24:43+00:00

小写c表示ISO8601日期,日期格式为YYYY-MM-DD,用字母T来间隔日期和时间,时间格式为HH:MM:SS,时区使用格林威治标准时间(GMT)的偏差来表示。

echo date('r');

Tue, 06 Feb 2007 14:25:52 +0000

小写r表示RFC822日期。

--------------------------------------------------------------------------------
 
4· by:

php中计算时间差有时候是件很麻烦的事!

不过我相信任何语言,只要撑握了其中规率就能找到办法,绝对是化腐朽为神奇的。

工作中经常要进行日期计算,下面总结几个工作中总结出的经验。先记下免得日后会忘!

1。第一种 计算时间段差(可以是分,秒,天)

$endtime="2004-09-09 18:10:00";

$d1=substr($endtime,17,2); //秒

$d2=substr($endtime,14,2); //分

$d3=substr($endtime,11,2); // 时

$d4=substr($endtime,8,2); //日

$d5=substr($endtime,5,2); //月

$d6=substr($endtime,0,4); //年

echo $d1.'-'.$d2.'-'.$d3.'-'.$d5.'-'.$d4.'-'.$d6."n";

echo date("Y-m-d H:i:s")."n";

$now_T=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));

echo $now_T."n";

$now_S=mktime("$d3","$d2","$d1","$d5","$d4","$d6");

echo $now_S."n";

$end_TS=($now_S-$now_T)/60;   //计算 剩余分钟

echo $end_TS;

?>

注 $startdate=mktime("0","0","0","1","1","2000");

//所得到的值为从1970-1-1到参数时间的总秒数 那么 化为分 /60   时 /3600   天/3600/24 即可!  
若mktime()中的参数缺省,那表示使用当前日期。

2. 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可!

若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可!

--------------------------------------------------------------------------------
 5· by:楼主

下列收集日期计算的方法:

某个日期加几天:

$tdate=date("Y-m-d");

$a=date( "Y-m-d", mktime(0,0,0,date("m"),date("d")+3,date("Y")));

$sql="select * from memo where username='$session_user_id'

and compid=$compid and telldate>='$tdate' and telldate<='$a'

order by id desc";

$ret=mysql_query($sql,$conn);

$a就是今天+三天的时间!

$b=date( "Y-m-d", mktime(0,0,0,date("m"),date("d")-3,date("Y")));

$b就是今天-三天的时间!

////

某个日期加n天后的日期

$days=abs((strtotime(date("Y-m-d"))-strtotime("xxxx-xx-xx"))/86400);

/////

<?PHP$Date_1="2003-7-15";//也可以是:$Date_1="2003-7-15 23:29:14";$Date_2="1982-10-1";$d1=strtotime($Date_1);$d2=strtotime($Date_2);$Days=round(($d1-$d2)/3600/24);Echo   "偶已经奋斗了 $Days 天^_^";?>

--------------------------------------------------------------------------------
 
6·php中计算时间差的几种方法 by:楼主

一个简单的例子就是计算借书的天数,这需要php根据每天的日期进行计算,下面就来谈谈实现这种日期计算的几种方法:

(1) 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可!若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可!
(2)如果没有数据库,那就得完全用php的时间日期函数!下面主要说明之:  
例:计算1998年5月3日到1999-6-5的天数:

<? $startdate=mktime("0","0","0","5","3","1998");

$enddate=mktime("0","0","0","6","5","1999");
//所得到的值为从1970-1-1到参数时间的总秒数:是整数.那么

//下面的代码就好编多了:

$days=round(($enddate-$startdate)/3600/24) ;

//days为得到的天数;

若mktime()中的参数缺省,那表示使用当前日期,这样便可计算从借书日期至今的天数.

--------------------------------------------------------------------------------
 
7· by:楼主

php中计算时间差有时候是件很麻烦的事!

不过我相信任何语言,只要撑握了其中规率就能找到办法,绝对是化腐朽为神奇的。

工作中经常要进行日期计算,下面总结几个工作中总结出的经验。先记下免得日后会忘!

1。第一种 计算时间段差(可以是分,秒,天)

$endtime="2004-09-09 18:10:00";

$d1=substr($endtime,17,2); //秒

$d2=substr($endtime,14,2); //分

$d3=substr($endtime,11,2); // 时

$d4=substr($endtime,8,2); //日

$d5=substr($endtime,5,2); //月

$d6=substr($endtime,0,4); //年

echo $d1.'-'.$d2.'-'.$d3.'-'.$d5.'-'.$d4.'-'.$d6."n";

echo date("Y-m-d H:i:s")."n";

$now_T=mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y"));

echo $now_T."n";

$now_S=mktime("$d3","$d2","$d1","$d5","$d4","$d6");

echo $now_S."n";

$end_TS=($now_S-$now_T)/60;   //计算 剩余分钟

echo $end_TS;

?>

注 $startdate=mktime("0","0","0","1","1","2000");

//所得到的值为从1970-1-1到参数时间的总秒数 那么 化为分 /60   时 /3600   天/3600/24 即可!

若mktime()中的参数缺省,那表示使用当前日期。

2. 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可!

若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可!

--------------------------------------------------------------------------------
 
8· by
日期与时间函数库

--------------------------------------------------------------------------------
本函数库共有 12 个函数

checkdate: 验证日期的正确性。

date: 将服务器的时间格式化。

strftime: 将服务器的时间本地格式化。

getdate: 获得时间及日期信息。

gettimeofday: 取得目前时间。

gmdate: 取得目前与 GMT 差后的时间。

easter_date: 计算复活节日期。

easter_days: 计算复活节与三月廿一日之间日期数。

mktime: 取得 UNIX 时间戳记。

gmmktime: 取得 UNIX 时间戳记的格林威治时间。

time: 取得目前时间的 UNIX 时间戳记。

microtime: 取得目前时间的 UNIX 时间戳记的百万分之一秒值。

函数:checkdate()

--------------------------------------------------------------------------------
日期与时间函数库

checkdate

验证日期的正确性。

语法: int checkdate(int month, int day, int year);

返回值: 整数

函数种类: 时间日期

内容说明

若日期是有效的则返回 true,若日期有问题,则返回 false。本函数可以用来检查日期是否有效。有效范围如下:

年 为 0 至 32767 年

月 为 1 至 12 月

日 则随着月份及闰年变化

函数:date()

--------------------------------------------------------------------------------

日期与时间函数库
date

将服务器的时间格式化。

语法: string date(string format, int [timestamp]);

返回值: 字符串

函数种类: 时间日期

内容说明

返回值的字符串依配置的格式来决定。若有传入时间戳记值,则将时间戳记格式化返回;若无传入时间戳记值,则将目前服务器的时间格式化返回。要将日期转为其它的语系格式,应使用setlocale() 及 strftime() 二个函数。字符串格式化的选项如下:

a - "am" 或是 "pm"

A - "AM" 或是 "PM"

d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"

D - 星期几,三个英文字母; 如: "Fri"

F - 月份,英文全名; 如: "January"

h - 12 小时制的小时; 如: "01" 至 "12"

H - 24 小时制的小时; 如: "00" 至 "23"

g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"

G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"

i - 分钟; 如: "00" 至 "59"

j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"

l - 星期几,英文全名; 如: "Friday"

m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"

n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"

M - 月份,三个英文字母; 如: "Jan"

s - 秒; 如: "00" 至 "59"

S - 字尾加英文序数,二个英文字母; 如: "th","nd"

t - 指定月份的天数; 如: "28" 至 "31"

U - 总秒数

w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)

Y - 年,四位数字; 如: "1999"

y - 年,二位数字; 如: "99"

z - 一年中的第几天; 如: "0" 至 "365"

其它不在上列的字符则直接列出该字符。

使用范例

范例一:

<?

print(date( "l dS of F Y h:i:s A" ));

print("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));

?>

范例二:

<?

$tomorrow = mktime(0,0,0,date("m") ,date("d")+1,date("Y"));

$lastmonth = mktime(0,0,0,date("m")-1,date("d"), date("Y"));

$nextyear = mktime(0,0,0,date("m"), date("d",   date("Y")+1);

?>

函数:strftime()

--------------------------------------------------------------------------------
日期与时间函数库

strftime

将服务器的时间本地格式化。

语法: string strftime(string format, int [timestamp]);

返回值: 字符串

函数种类: 时间日期

内容说明

返回值的字符串依配置的格式来决定。若有传入时间戳记值,则将时间戳记格式化返回;若无传入时间戳记值,则将目前服务器的时间本地格式化返回。月份或者星期名称随着本地语系配置 setlocale() 的不同而改变。

返回的字符串可以依下列的格式而定:

%a 星期几的缩写。

%A 星期几的全名。

%b 月份名称的缩写。

%B 月份名称的全名。

%c 本地端日期时间较佳表示字符串。

%d 用数字表示本月的第几天 (范围为 00 至 31)。

%H 用 24 小时制数字表示小时数 (范围为 00 至 23)。

%I 用 12 小时制数字表示小时数 (范围为 01 至 12)。

%j 以数字表示当年度的第几天 (范围为 001 至 366)。

%m 月份的数字 (范围由 1 至 12)。

%M 分钟。

%p 以 'AM' 或 'PM' 表示本地端时间。

%S 秒数。

%U 数字表示为本年度的第几周,第一个星期由第一个周日开始。

%W 数字表示为本年度的第几周,第一个星期由第一个周一开始。

%w 用数字表示本周的第几天 ( 0 为周日)。

%x 不含时间的日期表示法。

%X 不含日期的时间表示法。

%y 二位数字表示年份 (范围由 00 至 99)。

%Y 完整的年份数字表示,即四位数。

%Z 时区或名称缩写。

%% % 字符。

使用范例
<?php

setlocale ("LC_TIME", "C");

print(strftime("%A in Finnish is "));

setlocale ("LC_TIME", "fi");

print(strftime("%A, in French "));

setlocale ("LC_TIME", "fr");

print(strftime("%A and in German "));

setlocale ("LC_TIME", "de");

print(strftime("%A.

"));

?>

函数:getdate()

--------------------------------------------------------------------------------

日期与时间函数库
getdate

获得时间及日期信息。

语法: array getdate(int timestamp);
返回值: 数组
函数种类: 时间日期
内容说明
返回数组的元素包括下列的项目:
"seconds" - 秒

"minutes" - 分

"hours" - 时

"mday" - 当月的第几天

"wday" - 当周的第几天数字

"mon" - 月份数字

"year" - 年,数字

"yday" - 当年的第几天数字; 如: "299"

"weekday" - 星期几全名; 如: "Friday"

"month" - 月份全名; 如: "January"
--------------------------------------------------------------------------------
函数:gettimeofday()
--------------------------------------------------------------------------------
日期与时间函数库
gettimeofday

取得目前时间。

语法: array gettimeofday(void)
返回值: 数组
函数种类: 时间日期
内容说明
返回数组的元素包括下列的项目:
"sec" - 秒

"usec" - 百万分之一秒

"minuteswest" - 格林威治时间的分

"dsttime" - 目的的时区

函数:gmdate()

--------------------------------------------------------------------------------
日期与时间函数库
gmdate

取得目前与 GMT 差后的时间。
语法: string gmdate(string format, int timestamp);
返回值: 字符串
函数种类: 时间日期
内容说明

本函数与 date() 函数相似,不同的是本函数返回与格林威治标准时间 (Greenwich Mean Time, GMT) 时间差后的时间。

使用范例

<?php

echo date( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );

echo gmdate( "M d Y H:i:s",mktime(0,0,0,1,1,1998) );

?>

若执行本范例的机器在芬兰 (Finland, GMT +0200),返回的结果为:

Jan 01 1998 00:00:00

Dec 31 1997 22:00:00
函数:easter_date()

--------------------------------------------------------------------------------
日期与时间函数库

easter_date

计算复活节日期。
语法: int easter_date(int [year]);

返回值: 整数
函数种类: 时间日期

内容说明
输入某一年份,则以 UNIX 时间戳记的格式返回该年的复活节日期,若没有输入年份,则计算当年的日期。值的注意的是输入的年份必需在公元 1970 至 2037 年之间,否则无法计算。

使用范例

<?

echo date("M-d-Y", easter_date(1999));

echo date("M-d-Y", easter_date(2000));

echo date("M-d-Y", easter_date(2001));

?>

返回结果为

Apr-04-1999

Apr-23-2000

Apr-15-2001

--------------------------------------------------------------------------------
 
9· by:楼主

函数:easter_days()

--------------------------------------------------------------------------------
日期与时间函数库

easter_days

计算复活节与三月廿一日之间日期数。

语法: int easter_days(int [year]);
返回值: 整数

函数种类: 时间日期

内容说明

输入某一年份,则以计算该年复活节与三月二十一日之间的日期数,若没有输入年份,则以当年计算。这个函数可以用来替代 easter_date() 1970-2037 年外范围无法计算的问题。
使用范例
<?

echo easter_days(1999);

echo easter_days(1492);

echo easter_days(1913);

?>

返回结果为:

14 (4/4)

32 (4/22)

2 (3/23)
--------------------------------------------------------------------------------
 10· by:楼主

函数:mktime()
--------------------------------------------------------------------------------
日期与时间函数库
mktime

取得 UNIX 时间戳记。

语法: int mktime(int hour, int minute, int second, int month, int day, int year);

返回值: 整数

函数种类: 时间日期

内容说明
输入一个时间,则返回 UNIX 时间戳记的长整数。
使用范例

<?

echo date( "M-d-Y", mktime(0,0,0,12,32,1997) );

echo date( "M-d-Y", mktime(0,0,0,13,1,1997) );

echo date( "M-d-Y", mktime(0,0,0,1,1,1998) );

?>

11· by:楼主

函数:gmmktime()

--------------------------------------------------------------------------------
日期与时间函数库

gmmktime

取得 UNIX 时间戳记的格林威治时间。
语法: int gmmktime(int hour, int minute, int second, int month, int day, int year);

返回值: 整数

函数种类: 时间日期

内容说明

输入一个时间,则返回 UNIX 的格林威治时间戳记的长整数。

--------------------------------------------------------------------------------
12· by:楼主

函数:time()

--------------------------------------------------------------------------------

日期与时间函数库
time

取得目前时间的 UNIX 时间戳记。

语法: int time(void);

返回值: 整数

函数种类: 时间日期
内容说明
返回目前时间的戳记值。
--------------------------------------------------------------------------------
 13· by:楼主

函数:microtime()

--------------------------------------------------------------------------------
日期与时间函数库
microtime

取得目前时间的 UNIX 时间戳记的百万分之一秒值。

语法: string microtime(void);

返回值: 字符串

函数种类: 时间日期

内容说明

返回目前时间的百万分之一秒戳记值。若操作系统没有提供 gettimeofday() 的系统呼叫函数,则本函数亦无效。