PHP的date函数以及strtotime函数是很强大的。基本上围绕这2个函数就能处理绝大多数日常开发中日期的处理。

假设有一个需求是按周,月获取最近7周和最近7月的查询。那么我们肯定要划分出时间区间。

#先按月划分,获取上个月

我们一开始肯定想到这多简单啊

echo date("Y-m-01",strtotime('-1 months'));

但是有没有想过如果是发生在7月的31号(写这篇随笔是8月份)结果是如何。

echo date("Y-m-01",strtotime('-1 months',strtotime('2018-07-31')));

结果是2018-07-01 这不是当月吗?这个就是问题的关键,-1 months只会-30天而已。

最终的方法应该是

echo date("Y-m-01",strtotime(date('Y-m-1').' -1 months'));//这里是表示在当月第一天进行减,这样就避免了31号的情况

#然后我们按周获取,这里周统计可能会出现的坑就是 date('w')为周日的时候是为0.

$testDate = '2018-08-12';
while ($num>0){
//判断当前的天数
$weekdays = date('w',strtotime($testDate))==0?6:date('w',strtotime($testDate))-1;
//这里还要递增
$weekdays += 7*(7-$num);
$startTime = date('Y-m-d',strtotime('-'.$weekdays.' days',strtotime($testDate)));
echo $startTime.PHP_EOL;
$num--;
}

#整理后的函数,可直接使用

<?php
$num = 7;
$testDate = '2018-08-12';
print_r(getWeeks($testDate,$num));
print_r(getMonths($testDate,$num)); function getWeeks($date,$num=7){
$weekdaysArr = [];
while ($num>0){
//判断当前的天数
$weekdays = date('w',strtotime($date))==0?6:date('w',strtotime($date))-1;
//这里还要递增
$weekdays += 7*(7-$num);
$startTime = date('Y-m-d',strtotime('-'.$weekdays.' days',strtotime($date)));
$weekdaysArr[]= $startTime;
$num--;
}
return $weekdaysArr;
} function getMonths($date,$num=7){
$monthsArr = [];
while ($num>0){
$startTime = date("Y-m-01",strtotime(date('Y-m-1',strtotime($date)).' -'.(7-$num).' months'));
$monthsArr[]= $startTime;
$num--;
}
return $monthsArr;
}

  

PHP 获取周,月列表的更多相关文章

  1. C#根据当前时间获取周,月,季度,年度等时间段的起止时间

    最近有个统计分布的需求,需要按统计本周,上周,本月,上月,本季度,上季度,本年度,上年度等时间统计分布趋势,所以这里就涉及到计算周,月,季度,年度等的起止时间了,下面总结一下C#中关于根据当前时间获取 ...

  2. java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)

    获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...

  3. 用js获取周、月第一天和最后一天(转载)

    var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...

  4. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  5. java根据日期获取周几和获取某段时间内周几的日期

    整理两个日期的方法. 根据日期获取当天是周几 /** * 根据日期获取当天是周几 * @param datetime 日期 * @return 周几 */ public static String d ...

  6. iOS6.0下获取通讯录用户列表

    自iOS6.0后获取通讯录列表需要询问用户,经过用户同意后才可以获取通讯录用户列表.而且ABAddressBookRef的初始化工作也由ABAddressBookCreate函数转变为ABAddres ...

  7. 枚举PEB获取进程模块列表

    枚举进程模块的方法有很多种,常见的有枚举PEB和内存搜索法,今天,先来看看实现起来最简单的枚举PEB实现获取进程模块列表. 首先,惯例是各种繁琐的结构体定义.需要包含 ntifs.h 和 WinDef ...

  8. atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表

    atitit.) ---数据挖掘 获取回收站文件列表 1. 放入回收站的原理and 1 2. info2文件文件结构 1 3. 获得文件列表2个法: 正则表达式or解析 1 4. 路径正则表达式[a- ...

  9. 通过Calendar 类获取前一个月的第一天

      SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); //获取到当前的时间     Cale ...

  10. [转] Android SDK manager 无法获取更新版本列表

      打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...

随机推荐

  1. golang http proxy反向代理

    本文介绍golang中如何进行反向代理. 下面例子中, proxy server接收client 的 http request,转发给true server,并把 true server的返回结果再发 ...

  2. windows 安装lua-5.3.4 --引用自https://blog.csdn.net/wangtong01/article/details/78296369

    版权声明:本文为博主原创文章,转载时请标明出处.http://blog.csdn.net/wangtong01 https://blog.csdn.net/wangtong01/article/det ...

  3. Node.js express获取参数有三种方法

    express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...

  4. EXCEL自动撤销合并单元格并填充相应内容(转帖)

    若EXCEL工作表有很多合并的单元格,要将所有合并的单元格撤销,并填充撤销合并前显示的内容,这是一项很繁琐且容易出错的工作.但可通过宏程序可轻松准确地搞定,方法如下: 一.实现该功能的Excel宏程序 ...

  5. WIN7 WIN10赋予文件或者文件夹完全访问权限

    WIN7 WIN10赋予文件或者文件夹完全访问权限win7文件夹图标中多了一把小锁打不开文件夹怎么办?解决办法一:右击目录→取得管理员权限!该方法适用于win7旗舰版.解决办法二:添加everyone ...

  6. PAT 甲级 1054 The Dominant Color (20 分)

    1054 The Dominant Color (20 分) Behind the scenes in the computer's memory, color is always talked ab ...

  7. 向量的卷积(convolution)运算

    一.向量的卷积运算 给定两个n维向量α=(a0, a1, ..., an-1)T,β=(b0, b1, ..., bn-1)T,则α与β的卷积运算定义为: α*β=(c0, c1, ..., c2n- ...

  8. python大法好——模块(内置模块未完)

    模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. Python模块有什么作用? 1.模块内有许多函数方法,利用这些方法可以更简单的完成许多工作.2.模块 ...

  9. PropTypes验证器

    PropTypes用于对类型的验证,从而更加容易捕获bug.在React v15.5之前,它内置React.PropTypes函数帮助解决,之后放弃支持,采用prop-types库定义. import ...

  10. 直接添加viewController中的view时的注意事项

    直接添加viewController中的view时需要注意一个问题,比如: MyTestViewController *vc = [MyTestViewController new]; [self.v ...