php工器之日期总结

一、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"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值