刚接到一个需求,指定某个时间段,要按天,按月,按年,来分别计算所有经过的日期,

# 计算日期之间所有天
function prday($start, $end) { 
    //将ISO Date 转成 Timestamp
    $dt_start = strtotime($start);
    $dt_end   = strtotime($end);
	$day	  = array();
    do { 
        //将 Timestamp 转成 ISO Date 输出
        $day[] = date('Y-m-d', $dt_start);
    } while (($dt_start += 86400) <= $dt_end);    // 重复 Timestamp + 1 天(86400), 直至大于结束日期中止
	return $day;
}
# 计算日期之间所有月
function prmnth($start, $end){
	$dt_start = strtotime($start); // 自动为00:00:00 时分秒 两个时间之间的年和月份  
	$dt_end   = strtotime($end); 
	   
	$month = array();  
	$month[] = date('Y-m',$dt_start); // 当前月;  
	while( ($dt_start = strtotime('+1 month', $dt_start)) <= $dt_end){  
		  $month[] = date('Y-m',$dt_start); // 取得递增月;   
	}  
	return $month;
}
# 计算日期之间所有年
function pryear($start, $end){
	$dt_start = strtotime($start); // 自动为00:00:00 时分秒 两个时间之间的年和月份  
	$dt_end   = strtotime($end); 
	   
	$year = array();  
	$year[] = date('Y',$dt_start); // 当前年;  
	while( ($dt_start = strtotime('+1 year', $dt_start)) <= $dt_end){  
		  $year[] = date('Y',$dt_start); // 取得递增月;   
	}  
	return $year;
}


现在反过来,给任意时间,计算出所对应的时间撮

# 任意时间今天的开始和结束时间撮
	public static function ToDay($t = '') {
		$t = $t ? $t : time ();
		$today = array ();
		$today ['start'] = mktime ( 0, 0, 0, date ( "m", $t ), date ( "d", $t ), date ( "Y", $t ) );
		$today ['end'] = mktime ( 23, 59, 59, date ( "m", $t ), date ( "d", $t ), date ( "Y", $t ) );
		return $today;
	}
# 任意时间昨天的开始和结束时间撮
	public static function YesTerDay($t = '') {
		$t = $t ? $t : time ();
		$yesterday = array ();
		$yesterday ['start'] = mktime ( 0, 0, 0, date ( "m", $t ), date ( "d", $t ) - 1, date ( "Y", $t ) );
		$yesterday ['end'] = mktime ( 23, 59, 59, date ( "m", $t ), date ( "d", $t ) - 1, date ( "Y", $t ) );
		return $yesterday;
	}
# 任意时间周的开始和结束时间撮
	public static function getTimeOfWeek($y = '', $w = '') {
		$y = $y ? $y : date ( 'Y' );
		$w = $w ? $w : date ( 'W' );
		$end = strtotime ( sprintf ( "+%d weeks", $w - 0 ), mktime ( 0, 0, 0, 1, - 1, $y ) ) - 1;
		$start = strtotime ( sprintf ( "+%d weeks", $w - 1 ), mktime ( 0, 0, 0, 1, - 1, $y ) );
		return array (
				"start" => $start,
				"end" => $end 
		);
	}
# 任意时间月的开始和结束时间撮
	public static function mFristAndLast($y = 0, $m = 0) {
		$y = $y ? $y : date ( 'Y' );
		$m = $m ? $m : date ( 'm' );
		$d = date ( 't', strtotime ( $y . '-' . $m ) );
		return array (
				"start" => strtotime ( $y . '-' . $m ),
				"end" => mktime ( 23, 59, 59, $m, $d, $y ) 
		);
	}
# 任意时间年的开始和结束时间撮
	public static function YearTime($y = '') {
		$y = $y ? $y : date ( 'Y', time () );
		$year_start = $y . "-01-01 00:00:00";
		$year_end = $y . "-12-31 23:59:59";
		return array (
				'start' => strtotime ( $year_start ),
				'end' => strtotime ( $year_end ) 
		);
	}