系统时区设置

date_default_timezone_set()设置时区,例如

<?php
date_default_timezone_set("Asiz/Hong_Kong"); // 香港时区
date_default_timezone_set("RPC"); // 北京时区
?>

日期和时间函数

time()函数返回当前时间戳

echo time(); // 输出当前时间戳

输出:

1426083407

date()函数返回日期,date(format, timestamp),若无timestamp参数则返回当前日期。

format:
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”

echo date("Y-m-d H:i:s", 1426083407); // 输出时间戳对应的日期
echo "<br>";
echo date("Y-m-d H:i:s"); // 输出当前日期

输出:

2015-03-11 22:16:47
2015-03-11 22:26:26

getdate(timestamp) 返回一个包含日期时间各个部分的数组,若无参数则返回当前时间日期的数组。

$t = getdate();
echo $t['year'] . "年" . $t['mon'] . "月" . $t['mday'] . "日";
echo $t['hours'] . "时" . $t['minutes'] . "分" . $t['seconds'] . "秒";

输出:

2015年3月11日22时31分58秒

checkdate(month, day, year)检验日期的有效性

if(checkdate(2, 31, 2015))
    echo "2月有31号";
else
    echo "2月无31号";

输出:

2月无31号

strftime(format, timestamp)将时间戳转化为日期和时间,若无timestamp参数则以当前的时间戳为准

format:
%a - 当前区域星期几的简写
%A - 当前区域星期几的全称
%b - 当前区域月份的简写
%B - 当前区域月份的全称
%c - 当前区域首选的日期时间表达
%C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d - 月份中的第几天,十进制数字(范围从 01 到 31)
%D - 和 %m/%d/%y 一样
%e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ‘ 1’ 到 ‘31’)
%g - 和 %G 一样,但是没有世纪
%G - 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
%h - 和 %b 一样
%H - 24 小时制的十进制小时数(范围从 00 到 23)
%I - 12 小时制的十进制小时数(范围从 00 到 12)
%j - 年份中的第几天,十进制数(范围从 001 到 366)
%m - 十进制月份(范围从 01 到 12)
%M - 十进制分钟数
%n - 换行符
%p - 根据给定的时间值为 am' 或pm’,或者当前区域设置中的相应字符串
%r - 用 a.m. 和 p.m. 符号的时间
%R - 24 小时符号的时间
%S - 十进制秒数
%t - 制表符
%T - 当前时间,和 %H:%M:%S 一样
%u - 星期几的十进制数表达 [1,7],1 表示星期一 Warning
尽管 ISO 9889:1999(当前的 C 标准)明确指出一周从星期一开始,但是 Sun Solaris 的一周似乎从星期天开始并作为 1。
%U - 本年的第几周,从第一周的第一个星期天作为第一天开始
%V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
%W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
%w - 星期中的第几天,星期天为 0
%x - 当前区域首选的时间表示法,不包括时间
%X - 当前区域首选的时间表示法,不包括日期
%y - 没有世纪数的十进制年份(范围从 00 到 99)
%Y - 包括世纪数的十进制年份
%Z 或 %z - 时区名或缩写
%% - 文字上的 ‘%’ 字符

echo strftime("%Y-%b-%d %H:%M:%S", 1426083407);
echo "<br>";
echo strftime("%Y-%b-%d %H:%M:%S");

输出:

2015-Mar-11 22:16:47
2015-Mar-11 22:41:22

setlocale(constant,location)函数改变PHP本地化默认值,

constant:
LC_ALL - 包括下面的所有选项
LC_COLLATE -排序次序
LC_CTYPE - 字符类别及转换(例如所有字符大写或小写)
LC_MESSAGES - 系统消息格式
LC_MONETARY - 货币格式
LC_NUMERIC - 数字格式
LC_TIME - 日期

格式

echo setlocale(LC_TIME, "zh_CN");
echo strftime("%z");

输出:

中国标准时间

mktime(hours, minutes, seconds, month, day, year)返回对应的时间戳

echo mktime(22, 53, 20, 3, 11, 2015);

输出:

1426085600

microtime(true)可返回微秒级时间戳。

echo microtime(true);

输出:

1426085725.4697