| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- <?php
- class dateChajian extends Chajian
- {
- public $now;
- public $date;
-
- protected function initChajian()
- {
- $this->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;
- }
- }
|