php获取指定日期之间的各个周和月的起止时间


Posted in PHP onNovember 24, 2014

根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间

日志格式化类 Date.class.php

<?php

class Datefmt{

   function __construct() {}

  /**

   * 根据指定日期获取所在周的起始时间和结束时间

   */

  public function get_weekinfo_by_date($date) {

    $idx = strftime("%u", strtotime($date));

    $mon_idx = $idx - 1;

    $sun_idx = $idx - 7;

    return array(

      'week_start_day' => strftime('%Y-%m-%d', strtotime($date) - $mon_idx * 86400),

      'week_end_day' => strftime('%Y-%m-%d', strtotime($date) - $sun_idx * 86400),

      );

  }

  /**

   * 根据指定日期获取所在月的起始时间和结束时间

   */

  public function get_monthinfo_by_date($date){

    $ret = array();

    $timestamp = strtotime($date);

    $mdays = date('t', $timestamp);

    return array(

      'month_start_day' => date('Y-m-1', $timestamp),

      'month_end_day' => date('Y-m-'.$mdays, $timestamp)

      );

  }

  /**

   * 获取指定日期之间的各个周

   */

  public function get_weeks($sdate, $edate) {

    $range_arr = array();

    // 检查日期有效性

    $this->check_date(array($sdate, $edate));

    // 计算各个周的起始时间

    do {

      $weekinfo = $this->get_weekinfo_by_date($sdate);

      $end_day = $weekinfo['week_end_day'];

       $start = $this->substr_date($weekinfo['week_start_day']);

      $end = $this->substr_date($weekinfo['week_end_day']);

      $range = "{$start} ~ {$end}";

      $range_arr[] = $range;

       $sdate = date('Y-m-d', strtotime($sdate)+7*86400);

    }while($end_day < $edate);

    return $range_arr;

  }

  /**

  * 获取指定日期之间的各个月

  */

  public function get_months($sdate, $edate) {

    $range_arr = array();

    do {

      $monthinfo = $this->get_monthinfo_by_date($sdate);

      $end_day = $monthinfo['month_end_day'];

       $start = $this->substr_date($monthinfo['month_start_day']);

      $end = $this->substr_date($monthinfo['month_end_day']);

      $range = "{$start} ~ {$end}";

      $range_arr[] = $range;

       $sdate = date('Y-m-d', strtotime($sdate.'+1 month'));

    }while($end_day < $edate);

    return $range_arr;

  }

  /**

   * 截取日期中的月份和日

   * @param string $date

   * @return string $date

   */

  public function substr_date($date) {

    if ( ! $date) return FALSE;

    return date('m-d', strtotime($date));

  }

  /**

  * 检查日期的有效性 YYYY-mm-dd

  * @param array $date_arr

  * @return boolean

  */

  public function check_date($date_arr) {

    $invalid_date_arr = array();

    foreach ($date_arr as $row) {

      $timestamp = strtotime($row);

      $standard = date('Y-m-d', $timestamp);

      if ($standard != $row) $invalid_date_arr[] = $row;

    }

    if ( ! empty($invalid_date_arr)) {

      die("invalid date -> ".print_r($invalid_date_arr, TRUE));

    }

  } 

}

类文件的使用

<?php

    require_once "Datefmt.class.php";

     $datefmt = new Datefmt();

    // 输出11月1日和30日之间的各周

    var_dump($datefmt->get_weeks('2014-11-05', '2014-11-29'));

    /*结果为

    array(4) {

      [0]=>

      string(13) "11-03 ~ 11-09"

      [1]=>

      string(13) "11-10 ~ 11-16"

      [2]=>

      string(13) "11-17 ~ 11-23"

      [3]=>

      string(13) "11-24 ~ 11-30"

    }

    */

    // 输出2月1日和11月30日

    var_dump($datefmt->get_months('2014-02-03', '2014-11-29'));

    /*结果为

    array(10) {

      [0]=>

      string(13) "02-01 ~ 02-28"

      [1]=>

      string(13) "03-01 ~ 03-31"

      [2]=>

      string(13) "04-01 ~ 04-30"

      [3]=>

      string(13) "05-01 ~ 05-31"

      [4]=>

      string(13) "06-01 ~ 06-30"

      [5]=>

      string(13) "07-01 ~ 07-31"

      [6]=>

      string(13) "08-01 ~ 08-31"

      [7]=>

      string(13) "09-01 ~ 09-30"

      [8]=>

      string(13) "10-01 ~ 10-31"

      [9]=>

      string(13) "11-01 ~ 11-30"

    }

    */
PHP 相关文章推荐
怎样在PHP中通过ADO调用Asscess数据库和COM程序
Oct 09 PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 PHP
php 获取本地IP代码
Jun 23 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
在win7中搭建Linux+PHP 开发环境
Oct 08 PHP
php使用PDO方法详解
Dec 27 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
PHP时间函数使用详解
Mar 21 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
Nov 24 #PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 #PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 #PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 #PHP
thinkphp循环结构用法实例
Nov 24 #PHP
thinkphp特殊标签用法概述
Nov 24 #PHP
PHP中mysql_field_type()函数用法
Nov 24 #PHP
You might like
php at(@)符号的用法简介
2009/07/11 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php防止sql注入代码实例
2013/12/18 PHP
php如何连接sql server
2015/10/16 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
Shell脚本实现Linux系统和进程资源监控
2015/03/05 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
对于Python的框架中一些会话程序的管理
2015/04/20 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
pandas object格式转float64格式的方法
2018/04/10 Python
Puppeteer使用示例详解
2019/06/20 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
2019/07/18 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
Python容器类型公共方法总结
2020/08/19 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
Java基础知识面试要点
2016/07/29 面试题
护理专业自荐信
2013/12/03 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书