# 日期時間函數庫
[TOC]
通過 `phpinfo();` 查看內置的 **date** 擴展是否開啟。
```
<?php
// 通過 phpinfo() 查看是否安裝了 date 擴展
phpinfo();
```

## 設置時區
> 亞洲時區的列表 http://php.net/manual/zh/timezones.asia.php
* 修改 `php.ini` 配置文件。

> 針對所有腳本都生效。
* 通過 `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 函數
- 無限極分類