ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
# 日期时间函数库 [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)); // 验证日期的合法性 ```