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

$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. Django框架之序列化和上传文件

     一.Django的序列化(对于ajax请求) Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 1)django序列化的使用方法 . ...

  2. 46.UISearchBar的placeholder字体颜色和背景颜色

    1.改变searchbar的searchField属性 UITextField *searchField = [searchbar valueForKey:@"searchField&quo ...

  3. 33、iOS10 由于权限问题导致崩溃的大坑

    控制台报忠告: This app has crashed because it attempted to access privacy-sensitive data without a usage d ...

  4. poj-2406(字符串hash)

    题目链接:传送门 思路:字符串hash,终止条件竟然判断错了,真是太大意了. #include<iostream> #include<cstdio> #include<c ...

  5. hdu-4300(字符串hash)

    题目链接:传送门 参考文章:传送门 思路: (1)对字符串进行翻译,求出s1(未翻译),s2(已翻译)字符串,并分别对s1,s2进行hash操作. (2)比较s1的后x位和s2的前x位的hash值,求 ...

  6. SVD(6.5.1定理证明观察3)

  7. RNN文章总结

    1.RNN  基本结构类型 2. RNN 3.零基础入门深度学习(5) - 循环神经网络 4.

  8. 开启Greenplum DataBase报错:could not bind IPv4 socket: Address already in use

    在运行gpstart时无法开启服务,查看日志看到下图所示错误: 查看日志错误大概是端口已被占用,所以无法重启. 解决方法: (1)利用ipcs查看数据库占用的共享内存.(如下图所示) (2)查看数据库 ...

  9. lnmp源码编译安装zabbix

    软件安装 Mysql 安装 tar xf mysql-5.7.13-1.el6.x86_64.rpm-bundle.tar -C mysql rpm -e --nodeps  mysql-libs-5 ...

  10. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...