龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

根据给定的日期格式'YYYY-mm-dd',获取该日期

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
常用日期操作
常用日期操作
/**
 * 获取一年中所有星期的起始日期
 * @param $year 格式 'YYYY'
 * 返回二维数组 下标 key1值对应一年中某一天所在周的实际年份	key2值对应一年中某一天所在的周数[一年中第几周] 
 * 返回false 日期格式错误
 */
function get_all_weeks($year){
	$week_arr = array();
	$year = intval(trim($year));
	$preg = "/^\d{4,}$/";
	if(!preg_match($preg, $year)){
		return false;
	}	
	$begin_day = $year . '-01-01';
	$end_day = $year . '-12-31';
	//一年第一个星期一
	if(date('w',strtotime($begin_day))!=1){
		$begin_day = date('Y-m-d',strtotime("next monday", strtotime($begin_day)));
	}
	//第一个星期一所在周数
	$begin_week_num = intval(date('W',strtotime($begin_day)));
	//一年最后一个星期天
	if(date('w',strtotime($end_day))!=0){
		$end_day = date('Y-m-d',strtotime("last sunday",strtotime($end_day)));
		//存在跨年的星期,跨年所在周星期一
		$end_day_next = date('Y-m-d',strtotime($end_day)+24*60*60);
		//跨年星期所属年份与所在周数
		$stride_year = date('o',strtotime($end_day_next));
		$stride_weeknum = intval(date('W',strtotime($end_day_next)));
	}
	//最后一个星期天所在周数
	$end_week_num = intval(date('W',strtotime($end_day)));
	//一年第一个周一为一年的第一周或者第二周
	if($begin_week_num!=1){
		$i=2;
	}else{
		$i=1;
	}
	$j = 0;
	for($i;$i<=$end_week_num;$i++){		
		$start_date = date("Y-m-d", strtotime("$begin_day $j week"));
		$end_day = date("Y-m-d", strtotime($start_date . '+6 day'));
		$week_arr[$year][$i] = array(
			$start_date,
			$end_day
		);
		$j++;
	}
	if($end_day_next){
		$week_arr[$stride_year][$stride_weeknum] = array(
			$end_day_next,
			date("Y-m-d", strtotime($end_day_next . '+6 day'))
		);
	}
	return $week_arr;
}
//demo_调用
/*
$year = '2013';
if(get_all_weeks($year)){
	var_dump(get_all_weeks($year));
}else{
	echo '日期格式出错';
}
*/
/**
 * 获取某一天所在周的起始日期
 * 依赖 function get_all_weeks
 * @param $day 格式:'YYYY-mm-dd'
 * 返回false 日期格式错误
 * 正确,返回json "{"begin_day":"YYYY-mm-dd","end_day":"YYYY-mm-dd"}"
 */
function get_day_week($day){
	$date_arr = explode('-', trim($day));
	if(!checkdate(intval($date_arr[1]), intval($date_arr[2]), intval($date_arr[0]))){
		return false;
	}
	$year = date('Y',strtotime($day));
	$weeks = get_all_weeks($year);
	//某一天所属的年份与周数
	$real_year = date('o',strtotime($day));
	$week_num = intval(date('W',strtotime($day)));
	if(!empty($weeks[$real_year][$week_num][0]))
		$begin_day = $weeks[$real_year][$week_num][0];
	if(!empty($weeks[$real_year][$week_num][1]))
		$end_day = $weeks[$real_year][$week_num][1];
	//跨年周数值存储于上一年中
	if(empty($begin_day)||empty($end_day)){
		$year = date('Y',strtotime($day))-1;
		$weeks = get_all_weeks($year);
		$real_year = date('o',strtotime($day));
		$week_num = intval(date('W',strtotime($day)));
		if(!empty($weeks[$real_year][$week_num][0]))
			$begin_day = $weeks[$real_year][$week_num][0];
		if(!empty($weeks[$real_year][$week_num][1]))
			$end_day = $weeks[$real_year][$week_num][1];		
	}
	$the_day = array(
		'begin_day' => $begin_day,
		'end_day' => $end_day
	);
	$the_day = json_encode($the_day);
	return $the_day;
}
//demo_调用
/*
$day = '2014-01-01';
if(get_day_week($day)){
	var_dump(get_day_week($day));
}else{
	echo '日期格式出错';
}
*/
精彩图集

赞助商链接