now = $this->rock->now; $this->date = $this->rock->date; } public function formatdt($dt='',$format='Y-m-d H:i:s') { return date($format,strtotime($dt)); } /** 获取上月 */ public function lastmonth($dt, $type='Y-m') { return $this->adddate($dt,'m',-1,$type); } /** 计算时间间隔 */ public function datediff($type,$start,$end) { $time1 = strtotime($start); $time2 = strtotime($end); $val=0; switch($type){ case 'Y'://年 $Y1 = date('Y',$time1); $Y2 = date('Y',$time2); $val = $Y2 - $Y1; break; case 'm'://月份 $y1 = date('Y',$time1); $y2 = date('Y',$time2); $m1 = date('m',$time1); $m2 = date('m',$time2); $y = $y1 - $y2; $mz = 0; if($y1 == $y2){ $mz=$m2-$m1; }elseif($y1<$y2){ $mz = 12-$m1+$m2+12*($y2-$y1-1); }else{ $mz = -(12-$m2+$m1+12*($y1-$y2-1)); } $val = $mz; break; case 'd'://日 $dt1 = strtotime(date('Y-m-d',$time1)); $dt2 = strtotime(date('Y-m-d',$time2)); $time=$dt2-$dt1; $val = $time/3600/24; break; case 'H'://小时 $time = $time2 - $time1; $val = floor($time/3600); break; case 'i'://分钟 $time = $time2 - $time1; $val = floor($time/60); break; case 's'://秒 $val = $time2 - $time1; break; } return $val; } /** 时间计算添加 */ public function adddate($dt,$lx,$v=0,$type='') { $time = strtotime($dt); $arrn1 = explode(' ',$dt); $arrn = explode('-',$arrn1[0]); $Y = (int)$arrn[0]; $m = (int)$arrn[1]; $d = (int)$arrn[2]; $H=$i=$s=0; if($this->contain($dt,':')){ $arrn2 = explode(':',$arrn1[1]); $H = (int)$arrn2[0]; $i = (int)$arrn2[1]; $s = (int)$arrn2[2]; } $rval = $dt; if($type=='')$type=($H==0)?'Y-m-d':'Y-m-d H:i:s'; if($type=='datetime')$type='Y-m-d H:i:s'; if($v ==0)return date($type, $time); switch($lx){ case 'm'://月份 $time = mktime($H, $i, $s, $m+$v, $d, $Y); break; case 'Y'://年 $time = mktime($H, $i, $s, $m, $d, $Y+$v); break; case 'd'://日期 $time = mktime($H, $i, $s, $m, $d+$v, $Y); break; case 'H'://时 $time = mktime($H+$v, $i, $s, $m, $d, $Y); break; case 'i'://分 $time = mktime($H, $i+$v, $s, $m, $d, $Y); break; case 's'://秒 $time = mktime($H, $i, $s+$v, $m, $d, $Y); break; } $rval = date($type,$time); return $rval; } //是否包含返回bool public function contain($str,$a) { return $this->rock->contain($str,$a); } //判断是否为空 public function isempt($str) { return $this->rock->isempt($str); } public function diffstr($start, $end, $str, $lx=0, $restr='') { $time1 = strtotime($start); $time2 = strtotime($end); $sj = $time1-$time2; if($lx==1 && $sj<=0)return ''; return $this->sjdate($sj, $str, $restr); } public function sjdate($sj, $str='', $restr='') { $h = $i = $s = $d = 0; $d = floor($sj/3600/24); $sj = $sj - $d * 3600 * 24; $h = floor($sj/3600); $sj = $sj - $h*3600; $i = floor($sj/60); $s = $sj - $i * 60; $str = str_replace(array('d','H','i','s'),array($d,$h,$i,$s), $str); if($restr!=''){ $resta = explode(',', $restr); foreach($resta as $restas)$str = str_replace($restas,'', $str); } return $str; } public function isdate($dt) { $bo = false; if($this->isempt($dt))return $bo; $arr = explode('-', $dt); if(count($arr)>2)$bo = true; $len = strlen($dt); if($len>10){ $sfm = explode(' ', $dt); if(!isset($sfm[1]))return false; $arr = explode(':', $sfm[1]); if(count($arr)<2)return false; } return $bo; } /** 返回月份最大日期 */ public function getenddt($month) { $month = substr($month,0,7); $max = $this->getmaxdt($month); return ''.$month.'-'.$max.''; } public function getmaxdt($dt) { $d = explode('-', $dt); $m = (int)$d[1]; $y = (int)$d[0]; $a = array(31,28,31,30,31,30,31,31,30,31,30,31); $d = $a[$m-1]; if($y%4 == 0 && $m==2 && $y%100 != 0)$d++; return $d; } public function cnweek($date) { $arr = array('日','一','二','三','四','五','六'); return $arr[date('w', strtotime($date))]; } //读取本周日期 public function getweekarr($dt) { $w = date('w', strtotime($dt)); $a = array(-6,0,-1,-2,-3,-4,-5); $oi = $a[$w]; $le = $oi+7; for($j=$oi; $j<$le; $j++){ $arr[] = $this->adddate($dt, 'd', $j); } return $arr; } public function getweekfirst($dt) { $arr = $this->getweekarr($dt); return $arr[0]; } public function getweeklast($dt) { $arr = $this->getweekarr($dt); return $arr[6]; } /** 计算返回当前间隔分析:今天 10:20 */ public function stringdt($dttime, $type='G H:i') { $s = '';$H=$s=$i='00'; $dts= explode(' ', $dttime); $yms= explode('-', $dts[0]); $Y = $yms[0];$m = $yms[1];$d = $yms[2]; $jg = $this->datediff('d', $dts[0], $this->date); $G = ''; if($jg==0)$G='今天'; if($jg==1)$G='昨天'; if($jg==2)$G='前天'; if($jg==-1)$G='明天'; if($jg==-2)$G='后天'; $A = $G; if($G=='')$G=substr($dts[0], 5); if($A=='')$A=$dts[0]; $w = $this->cnweek($dts[0]); if(isset($dts[1])){ $sjs = explode(':', $dts[1]); $H = $sjs[0]; if(isset($sjs[1]))$i = $sjs[1]; if(isset($sjs[2]))$s = $sjs[2]; } $str = str_replace( array('A','G','H','i','s','w','Y','m','d'), array($A,$G,$H,$i,$s,$w, $Y, $m, $d), $type); return $str; } /** * 计算周期$rate:d1,d2,$dt开始时间 * 返回日期,根据日期判断是不是今天 */ public function daterate($rate, $dt, $nowdt='') { if(isempt($rate) || isempt($dt))return false;//没有周期 $dt = substr($dt,0, 10);//日期的类型 if($nowdt=='')$nowdt = $this->rock->date; $nowdt = substr($nowdt, 0, 10); $jg = str_replace(array('m','d','w','y'),array('','','',''),$rate); if($jg=='')$jg='1'; $jg = (int)$jg; $lx = substr($rate, 0, 1); if($lx=='d'){ $jge = $this->datediff('d', $dt, $nowdt); if($jge % $jg==0 || $jge==0){ return $nowdt; } } //每月 if($lx=='m'){ $jge = $this->datediff('m', $dt, $nowdt); if($jge % $jg==0 || $jge==0){ $ndt = date('Y-m-'.substr($dt, 8).''); if($ndt==$nowdt)return $nowdt; } } //每年 if($lx=='y'){ $jge = $this->datediff('y', $dt, $nowdt); if($jge % $jg==0 || $jge==0){ $ndt = date('Y-'.substr($dt, 5).''); if($ndt==$nowdt)return $nowdt; } } //每周 if($lx=='w'){ $w = (int)date('w', strtotime($nowdt));if($w==0)$w=7;//星期7 if($w==$jg){ return $nowdt; } } return false; } }