在讲时间与日期之前, 需要设置好 PHP 的配置文件 php.ini 里的 date.timezone=
选项. 否则, 一些关于时间的函数将不会生效. 如果你是按照本博客给出的方式安装 PHP 的话, 可以无视
如果不想在配置文件里设置的话, 可以通过 date_default_timezone_set()
函数设置
博主喜欢设置为 "Asia/Hong_Kong"
, 当然也可以设置为 PRC
1. UNIX 时间戳
在 UNIX 和 UNIX-like 系统中, 时间都是通过时间戳的方式进行存储的
时间戳就是现在距离 GMT (1970 年 1月 1 日 零点整) 的时间差, 单位为 秒
它是一个整数, 而且不可改变
PHP 完全采用了 UNIX 时间戳
在 PHP 中可以通过 time()
函数获取时间戳
<?php
$time = time();
?>
2. 获取时间日期信息
PHP 中提供了 date()
函数使得时间戳可以转换为能看得懂的通用时间. 除此之外, 还提供了 getdate()
函数, 不过这个函数返回的是一个关于时间的数组
date()
函数中, 有一个 formate
参数, 下面给出这个参数的具体值和对应的含义
d
- 一个月中的第几天 (从 01 到 31)D
- 星期几的文本表示 (用三个字母表示)j
- 一个月中的第几天, 不带前导零 (1 到 31)l
- 星期几的完整的文本表示N
- 星期几的 ISO-8601 数字格式表示 (1 表示 Monday[星期一], 7 表示 Sunday[星期日])S
- 一个月中的第几天的英语序数后缀 (2 个字符 : st、nd、rd 或 th. 与 j 搭配使用)w
- 星期几的数字表示 (0 表示 Sunday[星期日], 6 表示 Saturday[星期六])z
- 一年中的第几天 (从 0 到 365)W
- 用 ISO-8601 数字格式表示一年中的星期数字 (每周从 Monday[星期一] 开始)F
- 月份的完整的文本表示 (January[一月份] 到 December[十二月份])m
- 月份的数字表示 (从 01 到 12)M
- 月份的短文本表示 (用三个字母表示)n
- 月份的数字表示, 不带前导零 (1 到 12)t
- 给定月份中包含的天数L
- 是否是闰年 (如果是闰年则为 1, 否则为 0)o
- ISO-8601 标准下的年份数字Y
- 年份的四位数表示y
- 年份的两位数表示a
- 小写形式表示 : am 或 pmA
- 大写形式表示 : AM 或 PMB
- Swatch Internet Time (000 到 999)g
- 12 小时制, 不带前导零 (1 到 12)G
- 24 小时制, 不带前导零 (0 到 23)h
- 12 小时制, 带前导零 (01 到 12)H
- 24 小时制, 带前导零 (00 到 23)i
- 分,带前导零 (00 到 59)s
- 秒,带前导零 (00 到 59)u
- 微秒e
- 时区标识符 (例如 : UTC、GMT、Atlantic/Azores)I
- 日期是否是在夏令时 (如果是夏令时则为 1, 否则为 0)O
- 格林威治时间 (GMT)的差值,单位是小时 (实例 : +0100)P
- 格林威治时间 (GMT)的差值,单位是 hours:minutesT
- 时区的简写 (实例 : EST、MDT_Z
- 以秒为单位的时区偏移量. UTC 以西时区的偏移量为负数 (-43200 到 50400)c
- ISO-8601 标准的日期 (例如 2013-05-05T16:34:42+00:00)r
- RFC 2822 格式的日期 (例如 Fri, 12 Apr 2013 12:01:05 +0200)U
- 自 Unix 纪元 (January 1 1970 00:00:00 GMT)以来经过的秒数
<?php
echo date("Y"); #结果 : 返回目前的年份
?>
getdate()
函数同样也可以返回一些时间信息, 它对比 date()
函数, 更能让人明白. 因为这是一个关联数组. 接下来给出数组如何访问
[seconds]
- 秒[minutes]
- 分[hours]
- 小时[mday]
- 一个月中的第几天[wday]
- 一周中的某天[mon]
- 月[year]
- 年[yday]
- 一年中的某天[weekday]
- 星期几的名称[month]
- 月份的名称[0]
- 自 Unix 纪元以来经过的秒数
访问的时候, 可以对里面的索引加引号, 也可以不加
3. 时间检验
PHP 提供 checkdate()
函数来对时间进行检验, 如果没有这个函数, 就要自己写 switch() 语句进行检验了. 自己写函数检验非常麻烦
checkdate()
函数可以检验日期的有效性, 例如 2 月 31 日到底合不合法
checkdate($month, $date, $year);
4. 输出格式化时间戳的日期和时间
PHP 提供了 strftime()
函数来讲时间戳格式化为日期, 这个有点类似于 C++ 中的 sprinf() 函数
strftime($format, $time);
现在给出 $format
的具体格式
%a
- 星期几名称的简写%A
- 星期几名称的全称%b
- 月份名称的简写%B
- 月份名称的全称%c
- 首选的日期和时间表示法%C
- 表示世纪的数字 (年份除以 100, 范围从 00 到 99)%d
- 一个月中的第几天 (01 到 31)%D
- 时间格式, 与 %m/%d/%y 表示法相同%e
- 一个月中的第几天 (1 到 31)%g
- 与 %G 表示法类似,但不带世纪%G
- 与 ISO 星期数对应的 4 位数年份 (见 %V)%h
- 与 %b 表示法相同%H
- 小时, 使用 24 小时制 (00 到 23)%I
- 小时, 使用 12 小时制 (01 到 12)%j
- 一年中的第几天 (001 到 366)%m
- 月份 (01 到 12)%M
- 分%n
- 换行符%p
- 与给定的时间值相对应的 am 或 pm%r
- a.m. 和 p.m. 的时间标记法%R
- 24 小时制的时间标记法%S
- 秒%t
- tab 制表符%T
- 当前时间,与 %H:%M:%S 表示法相同%u
- 星期几的数字表示 (1 到 7), Monday[星期一] = 1. 警告 : 在 Sun Solaris 系统中, Sunday[星期日] = 1%U
- 当年包含的周数,从第一个星期日开始,作为第一周的第一天%V
- 当年包含的 ISO 8601 格式下的周数 (01 到 53), week 1 表示当年的第一周, 至少要有四天, 且以星期一作为周的第一天%W
- 当年包含的周数,从第一个星期一开始,作为第一周的第一天%w
- 以十进制数形式表示一周中的某天, Sunday[星期日] = 0%x
- 首选的日期表示法, 不带时间%X
- 首选的时间表示法, 不带日期%y
- 不包含表示世纪的数字的年份表示 (范围从 00 到 99)%Y
- 包含表示世纪的数字的年份表示%Z
或%z
- 时区名称或简写%%
- 输出一个 % 字符
$time
参数是 UNIX 时间戳
5. 时间戳转换
PHP 提供 mktime()
函数, 可以将给定的时间转换为时间戳
mktime($hour, $minute, $second, $month, $date, $year);
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :