最近根据项目需求写了一个接口,其中有一个条件是根据不同的时间日期来获取数据,这里做个笔记,记录下:
根据本日,本周,本月来获取数据,三个条件:
本日: 开始时间是从当日的00:00:00开始,到进日结束的23:59:59,算是一整天;
代码:
$start = date("Y-m-d 00:00:00");
$end = date("Y-m-d H:i:s");
本周:(利用date()函数的“w”这个参数,可以动态的获取每周的周几)
默认情况下,date("w")的最后一天是周六,第一天是周日(等于date("w")周日那天是为0),这是老外的习惯相当于是六天制;
我们按我们中国的习惯是来,对每周进行加或减一就行了:
代码:$days = date("w"); //动态获取每周的天数(今天是周几,就显示为周几,比如今天周三,就匹配到周三)
$start = strtotime( date("Y-m-d") ) - ($days? (($days - 1) : 6 ) * 60 * 60 * 24 );
解释:首先根据日期对周数(周的天数)进行相减,在周数这里使用了一个三元运算,意思就是:如果为date("w")为0,表示是星期天,那么就减6天,回到了周一;如果不是,就减去实际的周数,($days - 1)这里是表示第一天是按周一开始。周数减一天,日期少减一天,往前匹配一天即为周一。
$end = strtotime("{$days}+days");
解释:这句很好理解:开始为每周的第一天,那么计算结束时,当前是周几,数据就查询到周几(比如,今天是周三,我要查这周的数据,开始时间为周一,就是>=周一,结束时间为今天 <= 周三)周的天数是通过date("w")来动态匹配的。然后把获取的实际天数利用strtotime()转化成时间戳,进行运算就可以了。
本月:从当月第一天开始求,求出这个月的所有数据。
代码:
$start = strtotime(0, 0, 0, date("m"), 1, date("Y")); //这几个参数分别表示为:时,分,秒,月,天,年。
$end = strtotime(23, 59, 59, date("m"), date("t"), date("Y"));
解释:利用 date("m"),date("t"),date("Y") 动态的获取到,月、天、年。date("t")是动态获取到一个月的总天数。
当时间为开始时间时,把天数设置成 1,表示从这月的第一天开始。当计算结束时间时,利用date("t")去动态获取一个月的总天数就行了。