PHP 获取周,月列表
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 获取周,月列表的更多相关文章
- C#根据当前时间获取周,月,季度,年度等时间段的起止时间
最近有个统计分布的需求,需要按统计本周,上周,本月,上月,本季度,上季度,本年度,上年度等时间统计分布趋势,所以这里就涉及到计算周,月,季度,年度等的起止时间了,下面总结一下C#中关于根据当前时间获取 ...
- java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)
获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...
- 用js获取周、月第一天和最后一天(转载)
var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...
- Flex自定义组件开发之日周月日期选择日历控件
原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...
- java根据日期获取周几和获取某段时间内周几的日期
整理两个日期的方法. 根据日期获取当天是周几 /** * 根据日期获取当天是周几 * @param datetime 日期 * @return 周几 */ public static String d ...
- iOS6.0下获取通讯录用户列表
自iOS6.0后获取通讯录列表需要询问用户,经过用户同意后才可以获取通讯录用户列表.而且ABAddressBookRef的初始化工作也由ABAddressBookCreate函数转变为ABAddres ...
- 枚举PEB获取进程模块列表
枚举进程模块的方法有很多种,常见的有枚举PEB和内存搜索法,今天,先来看看实现起来最简单的枚举PEB实现获取进程模块列表. 首先,惯例是各种繁琐的结构体定义.需要包含 ntifs.h 和 WinDef ...
- atitit.提升备份文件复制速度(4) ---数据挖掘 获取回收站文件列表
atitit.) ---数据挖掘 获取回收站文件列表 1. 放入回收站的原理and 1 2. info2文件文件结构 1 3. 获得文件列表2个法: 正则表达式or解析 1 4. 路径正则表达式[a- ...
- 通过Calendar 类获取前一个月的第一天
SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); //获取到当前的时间 Cale ...
- [转] Android SDK manager 无法获取更新版本列表
打开这个网址(LINK)就可以看到adt的详细信息. 或者直接在你的eclipse的Help > Install New Software里面add,地址直接输入 https://dl-ss ...
随机推荐
- 让所有浏览器支持HTML5 video视频标签
HTML5究竟需要多少种视频编码格式 当前,video 元素支持三种视频格式:Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件MPEG4 = 带有 H.264 视频编 ...
- Delphi操作剪贴板
Windows使用剪贴板观察器和观察链.剪贴板观察器是一个显示剪贴板当前内容的窗口. 通常它应该至少能显示三种普通格式的内容:文字CF_TEXT.位图CF_BITMAP.元文件C ...
- Windows IIS安装php
[可参考文档:https://docs.microsoft.com/en-us/iis/application-frameworks/scenario-build-a-php-website-on-i ...
- Spark 性能调优-内存设置-GC设置
http://mt.sohu.com/20150604/n414449770.shtml http://my.oschina.net/mkh/blog/330386 http://itindex.ne ...
- Flink+Kafka 接收流数据并打印到控制台
试验环境 Windows:IDEA Linux:Kafka,Zookeeper POM和Demo <?xml version="1.0" encoding="UTF ...
- Angular2中使用ngx-translate进行国际化
转自 https://blog.csdn.net/u014291497/article/details/61233033 相较于angularjs中的ng-translate, angular2也有适 ...
- python之路——9
王二学习python的笔记以及记录,如有雷同,那也没事,欢迎交流,wx:wyb199594 学习内容 1.文件处理 1.打开文件 open(‘路径’,‘打开方式’) 打开方式 r w a r+ w+ ...
- (转发)storm 入门原理介绍
1.hadoop有master与slave,Storm与之对应的节点是什么? 2.Storm控制节点上面运行一个后台程序被称之为什么?3.Supervisor的作用是什么?4.Topology与Wor ...
- 5-安装sqoop
1.解压,修改权限 sudo tar -zvxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/app/ sudo chown -R hadoo ...
- 学习excel的使用技巧二批量复制
1 选中要操作的部分 2 CTRL+G 打开定位 3 点击 定位条件 4 选择空值 5 输入=号 然后键盘的 方向键 向上 6 按住CTRL+回车 即可实现 批量复制