/**
* 获取指定日期所在周的起止时间
* @param null $curTime
* @return array
*/
public function getCurWeek($curTime=null) {
$curTime = $curTime ? : date('Y-m-d');
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$week = date('w',strtotime($curTime));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$mon = "$curTime - ". ($week ? $week - 1 : 6)." day";
$start = date('Y-m-d',strtotime($mon));
$end = date('Y-m-d',strtotime($start.' + 6 day'));
return array('start' => $start,'end' => $end);
}
/**
* 获取指定日期前一周的起止时间
* @param null $curTime
* @return array
*/
public function getPrevWeek($curTime=null) {
$curTime = $curTime ? : time();
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$week = date('w',strtotime($curTime));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$mon = "$curTime - ". ($week ? $week - 1 : 6)." day";
$start = date('Y-m-d',strtotime($mon.' - 7 day'));
print_r($start);
$end = date('Y-m-d',strtotime($start.' + 6 day'));
print_r($end);
return array('start' => $start,'end' => $end);
}
/**
* 获取指定日期后一周的起止时间
* @param null $curTime
* @return array
*/
public function getNextWeek($curTime=null) {
$curTime = $curTime ? : time();
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$week = date('w',strtotime($curTime));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$mon = "$curTime - ". ($week ? $week - 1 : 6)." day";
$start = date('Y-m-d',strtotime($mon.' + 7 day'));
$end = date('Y-m-d',strtotime($start.' + 6 day'));
return array('start' => $start,'end' => $end);
}
/**
* 获取指定日期所在周的连续时间
* @param null $curTime
* @return array
*/
public function getWeeksByDate($curTime=null) {
$weeks = array('周日','周一','周二','周三','周四','周五','周六');
$weekRange = array();
$curTime = $curTime ? : date('Y-m-d');
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$week = date('w',strtotime($curTime));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$mon = "$curTime - ". ($week ? $week - 1 : 6)." day";
$start = date('Y-m-d',strtotime($mon));
$end = date('Y-m-d',strtotime($start.' + 6 day'));
$days = floor((strtotime($end)-strtotime($start))/86400);
for ($i=0;$i<=$days;$i++) {
$day = date('Y-m-d',strtotime($start.' '.$i.' day'));
$weekRange[] = array(
'day' => date('m-d',strtotime($day)),
'week' => $weeks[date('w',strtotime($day))],
'fullDay' => $day
);
}
return $weekRange;
}
/**
* 获取指定日期所在月的起止时间
* @param null $curTime
* @return array
*/
public function getCurMonth($curTime=null){
$curTime = $curTime ? : date('Y-m-d');
$timestamp = strtotime($curTime);
$days = date('t', $timestamp);
$start = date('Y-m-01', $timestamp);
$end = date('Y-m-'.$days, $timestamp);
return array('start' => $start,'end' => $end);
}
/**
* 获取指定日期所在月的连续时间
* @param null $curTime
* @return array
*/
public function getDaysByDate($curTime=null){
$dayRange = array();
$curTime = $curTime ? : date('Y-m-d');
$timestamp = strtotime($curTime);
$days = date('t', $timestamp);
$start = date('Y-m-01', $timestamp);
for ($i=0;$i<$days;$i++) {
$day = date('Y-m-d',strtotime($start.' '.$i.' day'));
$dayRange[] = array(
'day' => date('m-d',strtotime($day)),
'fullDay' => $day
);
}
return $dayRange;
}
/**
* 获取指定时间段内的连续时间
* @param $start 开始时间
* @param $end 截止时间
* @param bool $week 是否包含周信息,默认 false
* @return array
*/
public function getDaysByRange($start,$end,$week=false) {
$dayRange = array();
$weeks = array('周日','周一','周二','周三','周四','周五','周六');
$days = floor((strtotime($end)-strtotime($start))/86400);
for ($i=0;$i<=$days;$i++) {
$day = date('Y-m-d',strtotime($start.' '.$i.' day'));
$dayRange[] = array(
'day' => date('m-d',strtotime($day)),
'fullDay' => $day
);
}
if ($week) {
foreach ($dayRange as $key => $d) {
$dayRange[$key]['week'] = $weeks[date('w',strtotime($d['fullDay']))];
}
}
return $dayRange;
}
/**
* 获取指定年份中每个季度的起止时间
* @param null $year 年份
* @param int $quarter 季度序号,0 所有季度 | 1 一季度 | 2 二季度 | 3 三季度 | 4 四季度
* @return mixed
*/
public function getQuarter($year=null,$quarter=0){
$quarters = array(
array('start' => '01-01','end' => '12-31'),
array('start' => '01-01','end' => '03-31'),
array('start' => '04-01','end' => '06-30'),
array('start' => '07-01','end' => '09-30'),
array('start' => '10-01','end' => '12-31')
);
$year = $year ? : date('Y');
$fullQuarter = $quarters[$quarter];
$fullQuarter['start'] = sprintf('%s-%s',$year,$fullQuarter['start']);
$fullQuarter['end'] = sprintf('%s-%s',$year,$fullQuarter['end']);
return $fullQuarter;
}
/**
* 获取指定日期对应的时间戳,默认为当前日期
* @param string $dateTime 时间,格式示例:Y-m-d H:i:s
* @return int
*/
public function getTimeStamp($dateTime=''){
$date = new \DateTime($dateTime);
return $date->format('U');
}
/**
* 格式化时间戳
* @param $time 时间戳
* @param $format 时间格式,如:Y-m-d H:i:s
* @return string
*/
public function formatTimeStamp($time,$format=null){
$format = $format ? : 'Y-m-d H:i:s';
$date = new \DateTime(sprintf('@%s',$time));
//设置中国时区
$date->setTimezone(new \DateTimeZone('PRC'));
return $date->format($format);
}
/**
* 获取当前时间戳,精确到毫秒
* @return number
*/
public function getMicroTime(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
* 格式化时间戳,精确到毫秒,x代表毫秒
* @param $time 时间戳
* @param $format 时间格式,如:Y-m-d H:i:s
* @return mixed
*/
public function formatMicroTime($time,$format=null) {
if (strpos($time, '.') !== false) {
list($usec, $sec) = explode(".", $time);
}else{
$usec = substr($time,0,10);
$sec = str_replace($usec, '', $time);
}
$format = $format ? $format.'.x' : 'Y-m-d H:i:s.x';
$date = date($format,$usec);
return str_replace('x', $sec, $date);
}
/**
* 获取时间差
* @param $dateTime1 格式,如:Y-m-d H:i:s
* @param $dateTime2 格式,如:Y-m-d H:i:s
* @param $type 时间差类型,H 小时 | m 分钟 | s 秒,默认为天
* @return mixed
*/
public function getTimeDiff($dateTime1,$dateTime2,$type=null){
$diff = null;
$date1 = new \DateTime($dateTime1);
$date2 = new \DateTime($dateTime2);
if ($type) {
$seconds1 = $date1->format('U');
$seconds2 = $date2->format('U');
$temp = abs($seconds1 - $seconds2);
$type = strtoupper($type);
switch ($type) {
case 'H':
$diff = floor($temp/3600);
break;
case 'M':
$diff = floor($temp/60);
break;
case 'S':
$diff = $temp;
break;
default:
break;
}
} else {
$timeDiff = $date1->diff($date2);
$diff = $timeDiff->days;
}
return $diff;
}
/**
* 时间偏移量增量计算
* @param $intervalArr 偏移量数组,格式:array('year'=>'','mon'=>'','day'=>'','hour'=>'','min'=>'','sec'=>'')
* @param string $dateTime 时间,格式示例:Y-m-d H:i:s
* @return string
*/
public function addDateTime($intervalArr,$dateTime=''){
$date = new \DateTime($dateTime);
$interval = sprintf('P%sY%sM%sDT%sH%sM%sS',$intervalArr['year'],$intervalArr['mon'],
$intervalArr['day'],$intervalArr['hour'],$intervalArr['min'],$intervalArr['sec']);
$date->add(new \DateInterval($interval));
return $date->format('U');
}
/**
* 时间偏移量减量计算
* @param $intervalArr 偏移量数组,格式:array('year'=>'','mon'=>'','day'=>'','hour'=>'','min'=>'','sec'=>'')
* @param string $dateTime 时间,格式示例:Y-m-d H:i:s
* @return string
*/
public function subDateTime($intervalArr,$dateTime=''){
$date = new \DateTime($dateTime);
$interval = sprintf('P%sY%sM%sDT%sH%sM%sS',$intervalArr['year'],$intervalArr['mon'],
$intervalArr['day'],$intervalArr['hour'],$intervalArr['min'],$intervalArr['sec']);
$date->sub(new \DateInterval($interval));
return $date->format('U');
}
/**
* 比较日期大小
* @param $dateTime1 格式,如:Y-m-d H:i:s
* @param $dateTime2 格式,如:Y-m-d H:i:s
* @return int 参数1>参数2时,返回1,参数1<参数2时,返回-1,否则返回0
*/
public function compareDate($dateTime1,$dateTime2){
$date1 = new \DateTime($dateTime1);
$date2 = new \DateTime($dateTime2);
$seconds1 = $date1->format('U');
$seconds2 = $date2->format('U');
if ($seconds1 > $seconds2) {
return 1;
}
if ($seconds1 < $seconds2) {
return -1;
}
return 0;
}