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. Nginx反向代理tomcat返回400 bad request

    Nginx反向代理tomcat返回400 bad request nginx 版本1.12, tomcat版本 9.06 最近用Nginx做反向代理tomcat,实现前后端分离,nginx 将请求代理 ...

  2. python运行过程

    程序执行过程 PyCodeObject:PyCodeObject则是Python编译器真正编译成的结果. 当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Pyt ...

  3. msvcp140.dll丢失解决方案

    [首先给出99%情况下都能解决这个问题的最简单办法]:   下载并安装微软VC++2015版运行库 (英文全称:Microsoft Visual C++ 2015 Redistributable Pa ...

  4. [UE4]List View

    List View适合显示数以千条的列表 要点 一.创建Entry类,实现IUserObjectListEntry. 创建一个名为“EntryWidget”的UserWidget,添加如下图所示的控件 ...

  5. systemverilog assertion

    1.一般是单独写一个module 里面放assertion,  然后在验证平台顶层和RTL的实例化bind起来​ 2. |->表示直接进行判断,|=>表示下一拍判断,一般一个断言最好只写一 ...

  6. js运算符逻辑!和instanceof的优先级

    写js时间长了,运算符优先级很可能自然而然的就形成习惯了,也不需要特别注意优先级的问题. 至少到目前为止,我也没有真正了解过js当中所有运算符的具体优先级.也没有出过什么重大的问题. 但是直到今天,在 ...

  7. 面向连接的tcp 编程

    from socket import * serverSocket=socket(AF_INET,SOCK_STREAM) serverSocket.bind(("",8899)) ...

  8. 作着玩:登录页(纯css,不支持ie9以下)

    支持chrome FireFox 和 IE10+,(IE9也能显示,IE9以下不支持) <style type="text/css"> body{position:re ...

  9. RMI(远程方法调用)入门

    这两篇可以入门 http://www.cnblogs.com/ninahan0419/archive/2009/06/25/javarmi.html http://www.cnblogs.com/wx ...

  10. python大法好——Python 面向对象

    Python 面向对象  Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法 ...