php gets the start and end times of each week and month between the specified dates, php date
According to the specified two dates before and after, calculate the start time and end time of each week between the two dates, as well as the start time and end time of each month
Log formatting class Date.class.php
Copy code The code is as follows:
class Datefmt{
function __construct() {}
/**
* Get the start time and end time of the week based on the specified date
*/
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),
);
}
/**
* Get the start time and end time of the month based on the specified date
*/
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)
);
}
/**
* Get the weeks between the specified dates
*/
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;
}
/**
* Get each month between the specified dates
*/
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;
}
/**
* The month and day in the intercepted date
* @param string $date
* @return string $date
*/
public function substr_date($date) {
if ( ! $date) return FALSE;
return date('m-d', strtotime($date));
}
/**
* Check date validity 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));
}
}
}
类文件的使用
复制代码 代码如下:
require_once "Datefmt.class.php";
$datefmt = new Datefmt();
// Output the weeks between November 1st and 30th
var_dump($datefmt->get_weeks('2014-11-05', '2014-11-29'));
/*The result is
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"
}
*/
// Output February 1st and November 30th
var_dump($datefmt->get_months('2014-02-03', '2014-11-29'));
/*The result is
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"
}
*/
http://www.bkjia.com/PHPjc/917042.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/917042.htmlTechArticlephp gets the start and end times of each week and month between the specified dates, and the php date is based on the specified two dates before and after , calculates the start and end time of each week between these two dates, and...