php中一个有意思的日期逻辑处理

yipeiwu_com6年前PHP代码库
今天处理了一个很小的问题。
需求是这样的,从周一到周日只能看到上周一到上周日的数据。
这里直接从数据库里根据 date 字段查询 范围即可。
但需要PHP生成 开始日期和结束日期。

最开始,我直接这么处理。
复制代码 代码如下:

$start_date = date('Y-m-d' , strtotime("-2 week monday"));
$end_date = date('Y-m-d' , strtotime("$start_date +6 day"));

假如日期是 2011-07-19,$start_date= 2011-07-11 这样处理没有问题。
如果日期是 2011-07-18 ,$start_date 则会等于 2011-07-04,还活在上周。

于是换了种方法
复制代码 代码如下:

$getWeekDay = date("w");
$startDay = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $getWeekDay + 1 - 7, date("Y")));
$endDay = date("Y-m-d", strtotime("+6 day $startDay"));

假如日期是 2011-07-19,$start_date= 2011-07-11 这样处理没有问题,和我们期望的一样。
如果日期是 2011-07-24,我们期望的 $start_date 是 2011-07-11,但实际返回的是 2011-07-18。

不得已,我再改了下方法
复制代码 代码如下:

$getWeekDay = date("N") ;
$startDay = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - $getWeekDay + 1 - 7, date("Y")));
$endDay = date("Y-m-d", strtotime("+6 day $startDay"));

这下就OK 了。

相关文章

linux下为php添加iconv模块的方法

./configure --with-mysql=/backup/mysql --with-freetype-dir --with-jpeg-dir --with-png-dir --w...

PHP堆栈调试操作简单示例

本文实例讲述了PHP堆栈调试操作。分享给大家供大家参考,具体如下: 你是否想知道当前函数被哪些文件调用了,如果知道了这些路径,我们就能很好的理解程序的执行过程,这是非常重要的,也是了解别...

PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解

本文实例讲述了PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作。分享给大家供大家参考,具体如下: 在PHP中,会遇到这样的情况,子类继承父类,但是又需要对父类的属性和方法进行一...

PHPer 需要了解的 5 个 Composer 小技巧

Composer是新一代的PHP依赖管理工具。其介绍和基本用法可以看这篇《PHP管理依赖(dependency)关系工具 Composer 安装与使用》。本文介绍使用Composer的五...

使用php统计字符串中中英文字符的个数

复制代码 代码如下:<?phpecho $str = "43fdf测试fdsfadaf43543543职工问防盗锁防盗锁5345gfdgd";preg_match_all("/[0...