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 ...
随机推荐
- Http协议基础及发展历史
一.网络分层协议 经典五层模型 1.物理层:(电脑的硬件,网卡端口,网线,网线连出去的光缆) 定义物理设备如何传输数据 2.数据链路层 在通信的实体间建立数据链路连接. 两台机器物理上是可以连接在一起 ...
- Mysql索引会失效的几种情况
1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因): 2.对于多列索引,不是使用的第一部分,则不会使用索引: 3.like查询是以%开头: 4.如果列类型是字符串, ...
- Flask 框架
装饰器知识回顾 http://www.cnblogs.com/0bug/p/7978595.html 普通装饰器格式: def wrapper(func): def inner(*args, **kw ...
- 黄聪:分享几个免费IP地址查询接口(API)
淘宝IP地址库 提供的服务包括:1. 根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家.省.市和运营商.2. 用户可以根据自己所在的位置和使用的IP地址更新我们的服 ...
- springJdbc(jdbcTemplate)事物拦截失效问题解决
先贴上web.xml和spring-jdbc.xml代码: web.xml代码: <context-param> <param-name>contextConfigLocati ...
- Redis为什么可以支持那么大的并发访问量?为什么redis没有单点并发瓶颈?
一是redis使用内存 而是redis使用多路复用的IO模型: 现代的UNIX操作系统提供了select/poll/kqueue/epoll这样的系统调用,这些系统调用的功能是:你告知我一批套接字,当 ...
- [sharepoint]修改Item或者File的Author和Editor
写在前面 最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户 ...
- vue展示dicom文件,医疗系统。
环境:vue.webpack.constone 资料来源及文件:https://github.com/GleasonBian/CornerstoneVueWADO 需要下载的模块:cornerston ...
- Python + Robot Framework 环境搭建
一.Python 安装 说明:由于RIDE是基于python2.x开发,后期未做python3.x兼容,所以这里安装python2.7. 链接: https://pan.baidu.com/s/1yf ...
- dll 恐怖的代码调整
总结一波这998的不得不提的调整代码的心得. 调整代码的背景:现有wps美化代码分散在各个插件里面,导致每次修改一小部分代码,都要全新编译,并且只能跟版本发,所以决定将wps的美化代码整合成一个插件d ...