PHP中日期和时间函数简介
更新:HHH   时间:2023-1-7


PHP中日期和时间相关函数简介

一、UNIX时间戳

在当前大多数的UNIX系统中,保存当前日期和时间的方法是:保存格林尼治标准时间从1970年1月1日零点起到当前时刻的秒数,以32为整列表示。1970年1月1日零点也称为UNIX纪元。在Windows系统下也可以使用UNIX时间戳,简称时间戳,但如果时间在1970年以前或2038年以后,处理的时候可能会出现问题。

PHP在处理有些数据,特别是对数据库中时间类型的数据进行格式化时,经常需要先将时间类型的数据转化为UNIX时间戳再进行处理,另外,不同的数据库系统对时间类型的数据不能兼容转换,这时就需要将时间转化为UNIX时间戳,再对时间戳进行操作,这样就实现了不同数据库系统的跨平台性。

二、时间转化为时间戳

将用字符串表达的日期和时间转化为时间戳的形式,可以使用strtotime()函数。

int strtotime(string $time[,int $now])

$time是包含英语日期格式的字符串,$time值如果有毫秒数将被忽略。其值相对于$now参数给出的时间,如果没有给出则默认使用系统当前时间。

如果给定的年份是两位数字的形式,则年份值0~69表示2000~2069,70~100表示1970~2000.

另一个取得日期的UNIX时间戳的函数是mktime()函数,语法如下:

int mktime([int,$hour[,int $minute[,int $second[,$int $month[,int $day[,int $year]]]]]])

如果所有参数都为空,则默认为当前时间。

三、获取日期和时间

1.date()函数

date()函数的作用是将时间戳按照给定的格式转化为具体的日期和时间字符串。

string date(string $format[,int $timestamp])

说明:$format指定了转化后的日期和时间的格式,$timestamp是需要转化的时间戳,如果省略则使用本地当前时间,即默认值为time()函数的值。time()函数返回当前时间的时间戳。

date()函数指出的格式代码

字符说明返回值例子
d月份中的第几天01~31
D星期中的第几天Mon到Sun
j月份中的第几天,没有前导零1~31
I星期几,完整的文本格式Sunday~Saturday
NISO-8601格式数字表示的星期中的第几天1(星期一)~7(星期天)
S每月天数后面的英文后缀,用2个字符表示st、nd、rd或th,可以和j一起用
w星期中的第几天,数字表示0(星期天)~6(星期六)
z年份中的第几天0~366
WISO-8601格式年份中的第几周,每周从星期一开始例如:42(当年第42周)

F月份,完整的文本格式,如January或MarchJanuary~December
m数字表示的月份,有前导零01~12
M三个字母缩写表示的月份Jan~Dec
n数字表示的月份,没有前导零1~12
t给定月份所应有的天数28~31
L是否为闰年如果是闰年为1,否则为0
oISO-8601格式年份数字。这和Y的值相同,只是如果ISO的星期数(W)属于前一年或下一年,则用那一年例如:1999或2003
Y4为数字完整表示的年份例如:1999或2003
y2位数字表示的年份例如:99和93
a小写的上午和下午值

am和pm

A大写的上午和下午值AM和PM
BSwatch Internet标准时000-999
g小时,12小时格式,没有前导零1~12
G小时,24小时格式,没有前导零0~24
h小时,12小时格式,有前导零01~12
H小时,24小时格式,有前导零00~23
i有前导零的分钟数00~59
s秒数,有前导零00~59
e时区标志例如:UTC、GMT
I是否为夏令时如果是夏令时为1,否则为0

O与格林尼治时间相差的小时数例如:+0200
P与格林尼治时间(GMT)的差别,小时和分钟之间用冒号分割例如:+02:00
T本机所在的时区例如:EST、MDT
Z时区偏移量的秒数。UTC西边的时区偏移量总是负的,UTC东区的时区偏移量总是正的-43200~43200
cISO8601格式的日期2004-02-12T15:19:21+00:00
rRFC822格式的日期Thu,21,Dec2000 16:01:07 +0200
U从UNIX纪元开始至今的秒数time()函数









2.getdate()函数

使用getdate()函数也可以获取日期和时间信息。

array getdate([int ,$timestamp])

说明:$timestamp是要转化的时间戳,如果不给出则使用当前时间。函数根据$timestamp返回一个包含日期和时间信息的数组。

getdate()函数返回的数组中的键名和值

键名说明举例
seconds秒的数字表示0~59
minutes分钟的数字表示0~59
hours小时的数字表示0~23
mday月份中第几天的数字表示1~31
wday星期中第几天的数字表示0(表示星期天)~6(表示星期六)
mon月份的数字表示1~12
year4位数字表示的完整年份例如:1993或2003
yday一年中第几天的数字表示0~365
weekday星期几的完整文本表示Sunday~Saturday

month月份的完整文本表示January~December
0自UNIX纪元开始至今的秒数系统相关,典型值从-2147483648~2147483647

四、其他日期和时间函数

1.日期和时间的计算

由于时间戳是32位整型数据,所以通过对时间戳进行加减法运算可计算两个时间的差值。

2.检查日期

checkdate()函数可以用于检查一个日期数据是否有效,语法如下:

bool checkdate(int $month,int $day,int $year)

说明:$year的值是从1到32767,$month的值从1到12,$day的值在给定的$month值所具有的天数范围内,其中闰年的情况也考虑在内。当给定的日期是有效的日期时,函数返回TRUE,否则返回FALSE,

3.设置时区

系统默认的是格林尼治标准时间,所以显示当前时间可能与本地时间会有差别,PHP中提供了可以修改时区的函数date_default_timezone_set().

bool date_default_timezone_set(string $timezone_identifier)

参数$timezone_identifier为要指定的时区,中国大陆可用的值是Asia/Chongqing,Asia/Shanghai,Asia/Urumqi。北京时间可以使用PRC。

另外,还可以通过修改PHP配置文件的方法修改默认时区:打开php.ini,找到date_timezone选项,将选项前面的分号“;”去掉,将选项的值设为要设置的默认时区的时区标志符。保存后重启Apache,系统默认的时区就设置完了。


返回web开发教程...