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版(3)
Oct 09 PHP
PHP form 表单传参明细研究
Jul 17 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
Jun 21 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 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
将数组写入txt文件 var_export
2009/04/21 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
给ECShop添加最新评论
2015/01/07 PHP
laravel添加前台跳转成功页面示例
2019/10/22 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
JavaScript中的lastIndexOf()方法使用详解
2015/06/06 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Django视图扩展类知识点详解
2019/10/25 Python
浅谈keras 模型用于预测时的注意事项
2020/06/27 Python
用python写爬虫简单吗
2020/07/28 Python
Python如何将装饰器定义为类
2020/07/30 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
一般党员对照检查材料
2014/09/24 职场文书
判缓刑人员个人思想汇报
2014/10/10 职场文书
出国签证在职证明范本
2014/11/24 职场文书
谢师宴邀请函
2015/02/02 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server