一、php内置的日期对象和函数
php提供了两种方式处理日期,一种是面向对象的方式,一种是面向过程的方式(函数)。
方式一:源码路径:php runtime/date/date_c.php
DatePeriod:
DatePeriod类的构造方法接受三个参数而且都必须提供
DateTime实例,表示迭代开始的日期和时间 ;DateInterval实例,表示下一个日期和时间的间隔 ;整数,表示迭代的总次数 ;第四个参数是可选的,用于显式指定周期的结束日期和时间,如果迭代时想要排除开始日期和时间,可以把构造方法的最后一个参数设为DatePeriod::EXCLUDE_START_DATE常量:
$datetime = new \DateTime();
$interval = \DateInterval::createFromDateString('-1 day');
$period = new \DatePeriod($datetime, $interval, 3);
foreach ($period as $date) {
echo $date->format('Y-m-d'), PHP_EOL;
}
方式二:源码路径:php runtime/date/date.php
另外,php也提供了一些预定义常量,源码路径:php runtime/date/date_d.php
二、php日期的常用处理
清楚了php提供的处理日期的方式和源码位置那么可以很方便的自学,下面就总结一些常用的使用技巧。
日期的格式化
<?php
//面向对象的方式
//创建DateTime对象
$datetime = \DateTime::createFromFormat('Ymd', '20160618');//静态方法创建
//或$datetime = new DateTime("20160618");//实例化对象
//面向过程的方式
$datetime = date_create("20160618");
$datetime->setDate(2015, 2, 28);//修改日期
$datetime->setTime(20, 20, 24);//修改时间
$datetime->setTimezone($timezone);//修改时区
echo $datetime->format('Y-m-d');//格式化
日期的加减乘除
<?php
$datetime = date_create("20160618");
$datetime->modify( '-1 month' );
//另外,也可以结合DateInterval对象使用
$datetime = new DateTime();
$interval = new DateInterval('P2DT5H');//P2DT5H2M表示间隔两天五小时两分钟,要搞懂DateInterval参数格式规则!
$datetime->sub($interval);//减去间隔
echo $datetime->format('Y-m-d H:i:s');
两个日期间的间隔计算
<?php
//方式一,date_diff函数,用右边的数减左边的数
//方式二,DateTime->diff
$datetime1 = new \DateTime('2016-01-01 10:11:18');
$datetime2 = new \DateTime('2017-05-11 22:21:21');
$interval = $datetime1->diff($datetime2);
echo($interval->format('%R%Y'));//%表示使用格式化,R表示是大于这个日期(+),还是小于这个日期(-),a表示大于或小于多少天,时分秒正常使用y,m,d,h,i,s
日期字符串数组的排序
使用数组的排序函数即可
判断时间在某一时间段内
function get_curr_time_section()
{
$checkDayStr = date('Y-m-d ', time());
$timeBegin1 = strtotime($checkDayStr . "09:00" . ":00");
$timeEnd1 = strtotime($checkDayStr . "18:00" . ":00");
$curr_time = time();
if ($curr_time >= $timeBegin1 && $curr_time <= $timeEnd1) {
return 0;
}
return -1;
}
echo(strtotime("now") . "<br>");//当前时间戳
echo(strtotime("15 October 1980") . "<br>");
echo(strtotime("+5 hours") . "<br>");
echo(strtotime("+1 week") . "<br>");
echo(strtotime("+1 week 3 days 7 hours 5 seconds") . "<br>");
echo(strtotime("next Monday") . "<br>");
echo(strtotime("last Sunday"));