手机
当前位置:查字典教程网 >编程开发 >php教程 >php获取指定日期之间的各个周和月的起止时间
php获取指定日期之间的各个周和月的起止时间
摘要:根据指定的前后两个日期,计算这两个日期之间各个周的起始时间和结束时间,以及各个月的起始时间和结束时间日志格式化类Date.class.php...

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

日志格式化类 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中的时间处理

php调整服务器时间的方法

PHP二进制与字符串之间的相互转换

php准确获取文件MIME类型的方法

php截取指定2个字符之间字符串的方法

php按单词截取字符串的方法

php删除指定目录的方法

php获取twitter最新消息的方法

php实现用已经过去多长时间的方式显示时间

php curl 获取https请求的2种方法

精品推荐
分类导航