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

$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. [ASP.net]web.config的customErrors与httpErrors的区别

    之前一直知道设置web.config(其实就是xml文件)的customErrors的error来指向自定义的错误页的URL,但是今天在调试的时候发现customErrors无法跳转到自定义的页面,在 ...

  2. mybatis学习 十一 缓存

    1. 应用程序和数据库交互的过程是一个相对比较耗时的过程2. 缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率3. MyBatis 中默认 SqlSession 缓存(一级缓存)开启 同 ...

  3. 关于拼接SQL语句sqlMap的使用方法

    1.为什么使用? 主要还是为了代码中获取到值,然后带入SQL语句中拼接查询 2.怎么使用? 1)bean继承了BaseEntity类,该类中有 /** * 自定义SQL(SQL标识,SQL内容) */ ...

  4. adb push init.rc /

    http://blog.csdn.net/jumper511/article/details/28856249 修改Android init.rc文件后,需要将修改后的文件上传到手机,但是发下如下问题 ...

  5. rhel5.4+oracle 10g rac

    各种报错各种愁啊 ... 1> 不知道什么原因,在节点2执行root.sh 报错 .无解 . 还原虚拟机,重新安装 .唯一与以前不同的是,执行orainroot.sh后 接着在节点2执行.再去分 ...

  6. 自定义cell的高度

    // //  RootTableViewController.m //  Share // //  Created by lanouhn on 15/1/20. //  Copyright (c) 2 ...

  7. 20155326 2017-2018-1 《信息安全系统设计基础》第2周学习及课堂总结myod

    20155326 2017-2018-1 <信息安全系统设计基础>第1次学习及课堂总结myod 虚拟机之前出了一些问题,然后我重新弄了一个新的虚拟机. 先在虚拟机里面安装了git. 安完以 ...

  8. noip第13课作业

    1.    排身高 [问题描述] 鹏鹏的班上一共有 n 个学生.刚好每个同学的身高互不相同.鹏鹏想知道,所有同学中身高第二高的是谁. 输入格式:输入共两行,第一行有一个整数 n(2≤n≤100),表示 ...

  9. C语言四则运算编程

    #include<stdio.h> #include<stdlib.h> void main() { int c,e,f; int x; while(1) { x=rand() ...

  10. 【Andorid开发框架学习】之Mina开发之Mina简介

    今天我将介绍 Apache MINA的基本概念和 API,包括 I/O服务.I/O 会话.I/O 过滤器和 I/O 处理器. 一.MINA的简介 Apache MINA是一个网络应用程序框架,用来帮助 ...