## 获取两个时间之间的间距时间

$s = '2017-02-05';
$e = '2017-07-20';
$start    = new \DateTime($s);
$end = new \DateTime($e);
// 时间间距 这里设置的是一个月
$interval = \DateInterval::createFromDateString('1 month');
$period = new \DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format("Y-m") . "<br>\n";
}

输出结果:

-
-
-
-

获取头部和尾部的时间范围:

有时候会遇到这样一个场景如:

存在两行表:

  1. 月度考情表(记录每个员工一个月的考勤)

  2. 日度考勤表(记录每个员工每一天的考勤)

这时候有一个需求是这样的:

查询 “2017-02-05” —— “2017-012-20”

这之间的员工的考勤数据。

一般情况下会这么做,直接 根据时间筛选日度考勤表。结果是没问题的,但是试想一下,如果有2000个员工,每天的考勤, 那一年是不是  73W的数据了,如果两年呢? 加上做一些其他的操作,是不是效率很慢?

这个时候可以查询 “2017-02-05” —— “2017-012-20” 两个日期时间的完整月份也就是 2017-03,2017-04,2017-05..以此类推

剩下的不完整日期再拿出来 筛选日度考勤表,那么筛选的量会大大降低。

以下是获取不完整日期的代码:

$s = '2017-02-05';
$e = '2017-07-20'; // 获取头部的时间范围
if (date('j', strtotime($s)) > 1) {
$start_day_head = date('Y-m-01', strtotime($s));
$end_day_head = date('Y-m-t', strtotime($s));
$s = date('Y-m-01', strtotime("+1 months", strtotime($s)));
} // 获取尾部的时间范围
if (date('j', strtotime($e)) > 1) {
$start_day_tail = date('Y-m-01', strtotime($e));
$end_day_tail = date('Y-m-t', strtotime($e));
$e = date('Y-m-t', strtotime("-1 months", strtotime($e)));
}

PHP 获取两个时间之间的月份的更多相关文章

  1. oracle 计算两个时间之间的月份差,相差几个星期,相差多少天

    相差多少天:   sysdate-to_date('1991-01-01','YYYY-MM-DD'))<7 and (sysdate-to_date('1991=01=01','YYYY-MM ...

  2. 获取两个时间节点的月份列表&&每个月份的开始时间及结束时间

    //Q:从今天起之前五个月的列表 date_default_timezone_set('PRC'); $time=strtotime('-5 month'); //包含本月 $begin = strt ...

  3. JS 格式化时间(获取两个日期之间的每一天、每一月、每半小时、每一秒)

    时间戳转换为时间 // 时间戳转换为时间 function timestampToTime(timestamp, isMs = true) { const date = new Date(timest ...

  4. C# 获取两个时间段之间的所有时间与获取当前时间所在的季度开始和结束时间

    一:C# 获取两个时间段之间的所有时间 public List<string> GetTimeList(string rq1, string rq2) { List<string&g ...

  5. Java 获取两个日期之间的日期

    1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end ...

  6. java中获取两个时间中的每一天

    引入下面方法即可: /** * 获取两个时间中的每一天 * @param bigtimeStr 开始时间 yyyy-MM-dd * @param endTimeStr 结束时间 yyyy-MM-dd ...

  7. java 获取两个日期之间的所有日期(年月日)

    前言:直接上代码 java 获取两个日期之间的所有日期(年月日) /** * 获取两个日期之间的日期,包括开始结束日期 * @param start 开始日期 * @param end 结束日期 * ...

  8. java获取两个日期之间的所有日期

    java获取两个日期之间的所有日期   解决方法: 1.核心方法 private List<String> getBetweenDates(String start, String end ...

  9. MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数

    MySql计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数 计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数,这里主要分享的是通过MySql内置的函数 TimeStampDiff() ...

随机推荐

  1. GG镜像导航

    供程序员使用. http://dir.scmor.com/google/

  2. MyBatis中实现多表查询

    如果查询的数据量大,推荐使用N+1次查询.数据量少使用联合查询... 一. 1.Mybatis是实现多表查询方式 1.1  业务装配:对两个表编写单表查询语句,在业务(Service)把查询的两表结果 ...

  3. 2.7 Sobel导数

    OpenCV函数 Sobel(src_gray,grad_x/grad_y,ddepth,x_order,y_order,scale,delta,BORDER_DEFAULT ) Scharr( ) ...

  4. Le Chapitre IX

    Je crois qu'il profita, pour son évasion[evazjɔ̃]逃跑, d'une migration d'oiseaux sauvages[sovaʒ]未驯化的. ...

  5. Pappus一阶矩公式

  6. opencv知识积累

    1.OpenCV 3计算机视觉:Python语言实现 https://github.com/techfort/pycv 2.OpenCV3编程入门 opencv 均值模糊:一般用来处理图像的随机噪声 ...

  7. Win7 qt-windows-x86-msvc2015-5.6.0 DLL依赖库打包

    今天开始系统的学习QT,第一个测试的问题就是在纯净的系统中如何正常运行,也就是找出QT生成的exe的依赖库问题 网上搜了下可以简单粗暴的用 D:\Qt\Qt5.6.0\5.6\msvc2015\bin ...

  8. C#的math类的全部运算方法

    Abs 返回指定数字的绝对值.Acos 返回余弦值为指定数字的角度.Asin 返回正弦值为指定数字的角度.Atan 返回正切值为指定数字的角度.Atan2 返回正切值为两个指定数字的商的角度.BigM ...

  9. Eclipse sysout 和 fore 不起作用

    Content Assist ↑ 这是主角,可以快速生成语句. sysout 快捷键之后生成了 System.out.println(); fore 快捷键之后生成了 for(String arg : ...

  10. 《深入浅出MFC》系列之运行时类型识别(RTTI)

    /********************************************************************************** 发布日期:2017-11-13  ...