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 分页原理分析,大家可以看看
Dec 21 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
Sep 28 PHP
php将文本文件转换csv输出的方法
Dec 31 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
PHP截取IE浏览器并缩小原图的方法
Mar 04 PHP
php die()与exit()的区别实例详解
Dec 03 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP实现生成数据字典功能示例
May 24 PHP
yii2.0框架场景的简单使用示例
Jan 25 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 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
web方式ftp
2006/10/09 PHP
javascript 小型动画组件与实现代码
2010/06/02 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
2020/02/26 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python视频按帧截取图片工具
2019/07/23 Python
通过实例学习Python Excel操作
2020/01/06 Python
利用Python计算KS的实例详解
2020/03/03 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
用python进行视频剪辑
2020/11/02 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
初婚初育证明
2014/01/14 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
财务会计自荐信范文
2014/02/21 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
给公司的建议书范文
2014/05/13 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL