当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-29 11:45:27 浏览: 评论:0 

本文推荐给大家一个php类文件,可以根据指定日期获取所在周的起始时间和结束时间,并附上使用实例,有需要的小伙伴参考下吧

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

日志格式化类 Date.class.php 代码如下:

  1. <?php 
  2. class Datefmt{ 
  3.    function __construct() {} 
  4.   /** 
  5.    * 根据指定日期获取所在周的起始时间和结束时间 
  6.    */ 
  7.   public function get_weekinfo_by_date($date) { 
  8.     $idx = strftime("%u"strtotime($date)); 
  9.     $mon_idx = $idx - 1; 
  10.     $sun_idx = $idx - 7; 
  11.     return array
  12.       'week_start_day' => strftime('%Y-%m-%d'strtotime($date) - $mon_idx * 86400), 
  13.       'week_end_day' => strftime('%Y-%m-%d'strtotime($date) - $sun_idx * 86400), 
  14.       ); 
  15.   } 
  16.   /** 
  17.    * 根据指定日期获取所在月的起始时间和结束时间 
  18.    */ 
  19.   public function get_monthinfo_by_date($date){ 
  20.     $ret = array(); 
  21.     $timestamp = strtotime($date); 
  22.     $mdays = date('t'$timestamp); 
  23.     return array
  24.       'month_start_day' => date('Y-m-1'$timestamp), 
  25.       'month_end_day' => date('Y-m-'.$mdays$timestamp
  26.       ); 
  27.   } 
  28.   /** 
  29.    * 获取指定日期之间的各个周 
  30.    */ 
  31.   public function get_weeks($sdate$edate) { 
  32.     $range_arr = array(); 
  33.     // 检查日期有效性 
  34.     $this->check_date(array($sdate$edate)); 
  35.     // 计算各个周的起始时间 
  36.     do { 
  37.       $weekinfo = $this->get_weekinfo_by_date($sdate); 
  38.       $end_day = $weekinfo['week_end_day']; 
  39.        $start = $this->substr_date($weekinfo['week_start_day']); 
  40.       $end = $this->substr_date($weekinfo['week_end_day']); 
  41.       $range = "{$start} ~ {$end}"
  42.       $range_arr[] = $range
  43.        $sdate = date('Y-m-d'strtotime($sdate)+7*86400); 
  44.     }while($end_day < $edate); 
  45.     return $range_arr
  46.   } 
  47.   /** 
  48.   * 获取指定日期之间的各个月 
  49.   */ 
  50.   public function get_months($sdate$edate) { 
  51.     $range_arr = array(); 
  52.     do { 
  53.       $monthinfo = $this->get_monthinfo_by_date($sdate); 
  54.       $end_day = $monthinfo['month_end_day']; 
  55.        $start = $this->substr_date($monthinfo['month_start_day']); 
  56.       $end = $this->substr_date($monthinfo['month_end_day']); 
  57.       $range = "{$start} ~ {$end}"
  58.       $range_arr[] = $range
  59.        $sdate = date('Y-m-d'strtotime($sdate.'+1 month')); 
  60.     }while($end_day < $edate); 
  61.     return $range_arr
  62.   } 
  63.   /** 
  64.    * 截取日期中的月份和日 
  65.    * @param string $date 
  66.    * @return string $date 
  67.    */ 
  68.   public function substr_date($date) { 
  69.     if ( ! $datereturn FALSE; 
  70.     return date('m-d'strtotime($date)); 
  71.   } 
  72.   /** 
  73.   * 检查日期的有效性 YYYY-mm-dd 
  74.   * @param array $date_arr 
  75.   * @return boolean 
  76.   */ 
  77.   public function check_date($date_arr) { 
  78.     $invalid_date_arr = array(); 
  79.     foreach ($date_arr as $row) { 
  80.       $timestamp = strtotime($row); 
  81.       $standard = date('Y-m-d'$timestamp); 
  82.       if ($standard != $row$invalid_date_arr[] = $row
  83.     } 
  84.     if ( ! emptyempty($invalid_date_arr)) { 
  85.       die("invalid date -> ".print_r($invalid_date_arr, TRUE)); 
  86.     } 
  87.   } 

类文件的使用,代码如下:

  1. <?php 
  2.     require_once "Datefmt.class.php"
  3.      $datefmt = new Datefmt(); 
  4.     // 输出11月1日和30日之间的各周 
  5.     var_dump($datefmt->get_weeks('2014-11-05''2014-11-29')); 
  6.     /*结果为 
  7.     array(4) { 
  8.       [0]=> 
  9.       string(13) "11-03 ~ 11-09" 
  10.       [1]=> 
  11.       string(13) "11-10 ~ 11-16" 
  12.       [2]=> 
  13.       string(13) "11-17 ~ 11-23" 
  14.       [3]=> 
  15.       string(13) "11-24 ~ 11-30" 
  16.     } 
  17.     */ 
  18.     // 输出2月1日和11月30日 
  19.     var_dump($datefmt->get_months('2014-02-03''2014-11-29')); 
  20.     /*结果为 
  21.     array(10) { 
  22.       [0]=> 
  23.       string(13) "02-01 ~ 02-28" 
  24.       [1]=> 
  25.       string(13) "03-01 ~ 03-31" 
  26.       [2]=> 
  27.       string(13) "04-01 ~ 04-30" 
  28.       [3]=> 
  29.       string(13) "05-01 ~ 05-31" 
  30.       [4]=> 
  31.       string(13) "06-01 ~ 06-30" 
  32.       [5]=> 
  33.       string(13) "07-01 ~ 07-31" 
  34.       [6]=> 
  35.       string(13) "08-01 ~ 08-31" 
  36.       [7]=> 
  37.       string(13) "09-01 ~ 09-30" 
  38.       [8]=> 
  39.       string(13) "10-01 ~ 10-31" 
  40.       [9]=> 
  41.       string(13) "11-01 ~ 11-30" 
  42.     } 
  43.     */ 

Tags: php指定日期 php起止时间

分享到: