# 日期时间函数库
[TOC]
通过 `phpinfo();` 查看内置的 **date** 扩展是否开启。
```
<?php
// 通过 phpinfo() 查看是否安装了 date 扩展
phpinfo();
```
![](https://box.kancloud.cn/c5b8bd538d0ab2f04c4e43b1394f6ed3_949x138.png)
## 设置时区
> 亚洲时区的列表 http://php.net/manual/zh/timezones.asia.php
* 修改 `php.ini` 配置文件。
![](https://box.kancloud.cn/fc77890fe17904b909b3e5873c45da8d_811x148.png)
> 针对所有脚本都生效。
* 通过 `ini_set('date.timezone','');` 动态设置
```
ini_set('date.timezone','PRC');
```
> 设置指定配置选项的值。这个选项会在脚本运行时保持新的值,并在脚本结束时恢复。
* 通过 `date_default_timezone_set();` 动态设置
```
date_default_timezone_set('Asia/Shanghai');
```
## 格式化本地时间
### `date()` 函数的使用。
| format | 说明 | 返回值 |
| :-- | :-- | --: |
| `Y` | 4位完整的年份 | 2017 |
| `m` | 月份,带前导0 | 01~12 |
| `d` | 月份中的第几天,有前导0的2位数字 | 01~31 |
| `H` | 小时,24小时格式,有前导0 | 00~23 |
| `i` | 有前导0的分钟数 | 00~59 |
| `s` | 秒数,有前导0 | 00~59 |
### `date()` 函数常用参数介绍
```
<?php
ini_set('date.timezone', 'PRC');
echo date('Y'), '<br />'; // 2017
echo date('Y年m月d日'), '<br />'; // 2017年01月03日
echo date('Y-m-d'), '<br />'; // 2017-01-03
echo date('Y^-^m^-^d'), '<br />'; // 2017^-^01^-^03
echo date('Y/m/d H:i:s'), '<br />'; // 2017/01/03 19:46:30
echo date('y-n-j'), '<br />'; // 17-1-3 y:2位的年份,n:不带前导0的月份,j:不带前导0的天数
echo date('H:i:s a'), '<br />'; // 19:49:02 pm
echo date('H:i:s A'), '<br />'; // 19:49:14 PM
echo date('g:i:s'), '<br />'; // 7:49:56 g:不带前导0
echo date('w'), '<br />'; // 2 w:获得一周内的第几天,返回值为0~6
// 判断今天星期几
switch (date('w')) {
case 0:
$day = '日';
break;
case 1:
$day = '一';
break;
case 2:
$day = '二';
break;
case 3:
$day = '三';
break;
case 4:
$day = '四';
break;
case 5:
$day = '五';
break;
case 6:
$day = '六';
break;
default:
exit('非法时间');
}
echo date('Y年m月d日'), ' 星期', $day, '<br />'; // 2017年01月03日 星期二
// 检测是否为闰年
$year = date('Y');
if ($year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)) {
echo '是闰年';
} else {
echo '不是闰年';
}
// 直接通过函数检测 `date()` 的 L 参数,是返回 1 不是返回 0
echo '<br />', date('L') ? '是闰年' : '不是闰年', '<br />';
// 获取当天是本年中的周
echo '当天是本年中的', date('W'), '<br />'; // 本年中的01
echo date('z'),'<br />'; // 当前是全年的第 2 天
// 获取当前月总共有多少天
echo date('t'),'天','<br />'; // 31天
```
### 时间戳的使用
```
<?php
echo time(), '<br />'; // 获取当前时间戳
echo date('Y-m-d H:i:s', time()), '<br />';
echo '一天之后的这个时间为:', date('Y-m-d H:i:s', time() + 24 * 3600), '<br />';
echo '一周之后的这个时间为:', date('Y-m-d H:i:s', time() + 7 * 24 * 3600), '<br />';
echo '15天之前的这个时间为:', date('Y-m-d H:i:s', time() - 15 * 24 * 3600), '<br />';
echo mktime(0, 0, 0, 1, 3, 2017), '<br />'; // mktime(小时,分钟,秒,月份,天数,年份数) 获得指定日期的时间戳
echo date('Y-m-d H:i:s', mktime(12, 0, 1, 5, 5, 1991)), '<br />'; // 格式化一个特殊的日期
// 计算两个日期的时间差
$birth = mktime(0, 0, 0, 5, 1, 1991); // 将指定的日期转换成时间戳
$time = time();
echo floor(($time - $birth) / (24 * 3600 * 365));
```
### `strtotime()` 函数的使用
```
<?php
echo time(), '<br />';
echo strtotime('now'), '<br />'; // 当前时间戳
echo strtotime('-1 day'), '<br />'; // 昨天此时的时间戳
echo strtotime('+1 week'), '<br />'; // 一周后的时间戳
echo strtotime('+3 month'), '<br />'; // 三个月后的今天的时间戳
echo strtotime('last Monday'), '<br />'; // 上个礼拜一的时间戳 也就是格式化成:2017-01-02 00:00:00
```
### `microtime()` 微秒
```
<?php
echo microtime(), '<br />'; // 0.11860100 1483446776
echo time(), '<br />'; // 1483446776
echo microtime(true), '<br />'; // 1483446776.12
// 计算程序的运行效率
$start = microtime(true);
for ($i = 1; $i <= 100000000; $i++) {
$arr[] = $i;
}
$end = microtime(true);
echo '程序执行时间:', round($end - $start, 4);
```
### 其他相关函数
```
<?php
print_r(getdate()); // 取得日期/时间信息
print_r(gettimeofday()); // 取得当前时间
var_dump(checkdate(81, 1, 2017)); // 验证日期的合法性
```
- 开始
- PHP配置参数的介绍
- PHP代码优化
- php中的命名空间
- PHP文件上传类
- PHP文件下载
- PHP验证码
- ThinkPHP3.2 框架函数
- A函数:实例化控制器
- C函数:设置和获取配置参数
- D函数:实例化模型
- F 函数:快速缓存设置和存取
- M函数:例化模型(无需定义模型类)
- L函数:设置和获取语言变量
- S 函数:缓存设置和存取
- R函数:直接调用控制器的操作方法
- U函数:URL地址生成
- I 函数:安全获取系统输入变量
- 日志
- ThinkPHP在关闭调试模式导致函数被缓存
- MySQL触发器使用时遇到的坑
- PHP常用函数
- 五一回家记录
- window的PHP开发(wamp)下安装redis扩展
- Windows下安装使用Redis
- PHP7新特性
- 利用 phpmailer 类实现队列发送邮件
- GD 库图像处理
- 检测 PHP 模块是否开启
- GD 库操作一般步骤
- GD 库绘画改变字体
- GD 绘制验证码
- GD 缩略图实现
- GD 绘制水印
- 日期时间函数库
- PHP 函数
- 无限极分类