在开发中会遇到获取两个日期之间的差值,获取每天的日期格式等等,针对这和问题给出对应的函数进行处理
计算出两个日期之间的月份 dateMonths()
/**
* 计算出两个日期之间的月份
* @author 微云科技 ROVAST
* @param [type] $start_date [开始日期,如2014-03]
* @param [type] $end_date [结束日期,如2015-12]
* @param string $explode [年份和月份之间分隔符,此例为 - ]
* @param boolean $addOne [算取完之后最后是否加一月,用于算取时间戳用]
* @return [type] [返回是两个月份之间所有月份字符串]
*/
function dateMonths($start_date,$end_date,$explode='-',$addOne=false){
//判断两个时间是不是需要调换顺序
$start_int = strtotime($start_date);
$end_int = strtotime($end_date);
if($start_int > $end_int){
$tmp = $start_date;
$start_date = $end_date;
$end_date = $tmp;
}
//结束时间月份+1,如果是13则为新年的一月份
$start_arr = explode($explode,$start_date);
$start_year = intval($start_arr[0]);
$start_month = intval($start_arr[1]);
$end_arr = explode($explode,$end_date);
$end_year = intval($end_arr[0]);
$end_month = intval($end_arr[1]);
$data = array();
$data[] = $start_date;
$tmp_month = $start_month;
$tmp_year = $start_year;
//如果起止不相等,一直循环
while (!(($tmp_month == $end_month) && ($tmp_year == $end_year))) {
$tmp_month ++;
//超过十二月份,到新年的一月份
if($tmp_month > 12){
$tmp_month = 1;
$tmp_year++;
}
$data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
}
if($addOne == true){
$tmp_month ++;
//超过十二月份,到新年的一月份
if($tmp_month > 12){
$tmp_month = 1;
$tmp_year++;
}
$data[] = $tmp_year.$explode.str_pad($tmp_month,2,'0',STR_PAD_LEFT);
}
return $data;
}
计算出两个日期之间的月份区间 dateMonthsSections()
/**
* 计算出两个日期之间的月份区间
* @author 微云科技 ROVAST
* @param [type] $start_date [开始日期,如2014-03]
* @param [type] $end_date [结束日期,如2015-12]
* @param string $explode [年份和月份之间分隔符,此例为 - ]
* @param boolean $addOne [算取完之后最后是否加一月,用于算取时间戳用]
* @return [type] [返回是两个月份之间所有月份字符串]
*/
function dateMonthsSections($start_date, $end_date, $explode='-', $addOne=false){
$data = dateMonths($start_date,$end_date,$explode,$addOne);
$length = sizeof($data);
$res = array();
foreach ($data as $key => $value) {
if($key < ($length-1)){
$date1 = $value;
$date2 = $data[$key + 1];
$res[$key][0] = $date1;
$res[$key][1] = $date2;
}
}
return $res;
}
获取当月天数 get_day()
/**
* 获取当月天数
* @param $date
* @param $rtype 1天数 2具体日期数组
* @return
*/
function get_day( $date ,$rtype = '1')
{
$tem = explode('-' , $date); //切割日期 得到年份和月份
$year = $tem['0'];
$month = $tem['1'];
if( in_array($month , array( '1' , '3' , '5' , '7' , '8' , '01' , '03' , '05' , '07' , '08' , '10' , '12')))
{
// $text = $year.'年的'.$month.'月有31天';
$text = '31';
}
elseif( $month == 2 )
{
if ( $year%400 == 0 || ($year%4 == 0 && $year%100 !== 0) ) //判断是否是闰年
{
// $text = $year.'年的'.$month.'月有29天';
$text = '29';
}
else{
// $text = $year.'年的'.$month.'月有28天';
$text = '28';
}
}
else{
// $text = $year.'年的'.$month.'月有30天';
$text = '30';
}
if ($rtype == '2') {
for ($i = 1; $i <= $text ; $i ++ ) {
$r[] = $year."-".$month."-".$i;
}
} else {
$r = $text;
}
return $r;
}