somaDia(-10); * * - Calcula diferenca entre duas datas. * * Operacoes: difDataHora. * Formatos : * Data: 15/01/2007 10:35:00 * E necessario passar duas datas como parametro e o tipo de retorno desejado: * Ex: * $obj->difDataHora($dataMenor,$dataMaior,"m"); * */ class CalcDataHora { private $data; private $hora; private $fmtDef = array("d" => 0, "m" => 1, "y" => 2, "h" => 0, "i" => 1, "s" => 2); public function somaDia($dias = 1) { $this->CalcDataHora(strftime_("%d/%m/%Y", mktime(0, 0, 0, $this->data[1], $this->data[0] + $dias, $this->data[2])), ""); return $this->data; } function CalcDataHora($data = "", $hora = "") { if ($hora == "") { $hora = date("H:i:s"); } if ($data == "") { $data = date("d/m/Y"); } else if ($this->validaData($data, "d")) { die("Padrao de data ($data) invalido! - Padrao = 15/01/2007"); } $this->data = explode("/", $data); $this->hora = explode(":", $hora); } // DATA private function validaData($data, $op) { switch ($op) { case "d": // Padrao: 15/01/2007 $er = "(([0][1-9]|[1-2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/([0-9]{4}))"; if ( preg_match($er, $data)) { return 0; } else { return 1; } break; case "dh": // Padrao 15/01/2007 10:30:00 $er = "(([0][1-9]|[1-2][0-9]|[3][0-1])\/([0][1-9]|[1][0-2])\/([0-9]{4})*)"; if ( preg_match($er, $data)) { return 0; } else { return 1; } break; } } public function somaMes($meses = 1) { $this->CalcDataHora(strftime_("%d/%m/%Y", mktime(0, 0, 0, $this->data[1] + $meses, $this->data[0], $this->data[2])), ""); return $this->data; } public function somaAno($anos = 1) { $this->CalcDataHora(strftime_("%d/%m/%Y", mktime(0, 0, 0, $this->data[1], $this->data[0], $this->data[2] + $anos)), ""); return $this->data; } public function getData($fmt = '') { if ($fmt) { /* d/m/Y */ $fmt = substr(trim(strtolower($fmt)), 0, 5); $fmtA = preg_split('/[\/,:, , -]/', $fmt, -1); $zero = $this->fmtDef[$fmtA[0]]; $um = $this->fmtDef[$fmtA[1]]; $dois = $this->fmtDef[$fmtA[2]]; $sep = count(preg_split('/\//', $fmt, -1)) > 1 ? '/' : '-'; return sprintf("%s%s%s%s%s", $this->data[$zero], $sep, $this->data[$um], $sep, $this->data[$dois]); } return $this->data[0] . "/" . $this->data[1] . "/" . $this->data[2]; } public function getDataHora($fmt = '') { if ($fmt) { /* d/m/Y H:i:s */ $fmt = substr(trim(strtolower($fmt)), 0, 11); $fmtA = preg_split('/[\/,:, , -]/', $fmt, -1); $zero = $this->fmtDef[$fmtA[0]]; $um = $this->fmtDef[$fmtA[1]]; $dois = $this->fmtDef[$fmtA[2]]; $tres = $this->fmtDef[$fmtA[3]]; $quatro = $this->fmtDef[$fmtA[4]]; $cinco = $this->fmtDef[$fmtA[5]]; $sep = count(preg_split('/\//', $fmt, -1)) > 1 ? '/' : '-'; return sprintf("%s$sep%s$sep%s %s:%s:%s", $this->data[$zero], $this->data[$um], $this->data[$dois], $this->hora[$tres], $this->hora[$quatro], $this->hora[$cinco]); } return sprintf("%s/%s/%s %s:%s:%s", $this->data[0], $this->data[1], $this->data[2], $this->hora[0], $this->hora[1], $this->hora[2]); } // HORA public function somaSegundo($segundos = 1) { $this->CalcDataHora("", strftime_("%H:%M:%S", mktime($this->hora[0], $this->hora[1], $this->hora[2] + $segundos, 0, 0, 0))); return $this->hora; } public function somaMinuto($minutos = 1) { $this->CalcDataHora("", strftime_("%H:%M:%S", mktime($this->hora[0], $this->hora[1] + $minutos, $this->hora[2], 0, 0, 0))); return $this->hora; } public function somaHora($horas = 1) { $this->CalcDataHora("", strftime_("%H:%M:%S", mktime($this->hora[0] + $horas, $this->hora[1], $this->hora[2], 0, 0, 0))); return $this->hora; } public function getHora() { return $this->hora[0] . ":" . $this->hora[1] . ":" . $this->hora[2]; } /** * * Retorna diferen�a entre as datas em Dias, Horas ou Minutos * Function difDataHora(data menor, [data maior],[dias horas minutos segundos]) * * Formato 04/05/2006 12:00:00 * * Chame a funcao com o valor NULL como 'data maior' para 'data maior' = data atual. * * Formatacao do retorno [dias horas minutos segundos]: * * "s": Segundos * "m": Minutos * "H": Horas * "h": Horas arredondada * "D": Dias * "d": Dias arredontados * * Original: Gambiarra.com.br Bozo@gambiarra.com.br * * Modificado: Andre Lourenco Pedroso alp.pedroso@gmail.com * Data 15/01/2007 10:00 */ public function difDataHora($datamenor, $datamaior = "", $tipo = "") { if ($this->validaData($datamenor, "dh")) { die("data errada - $datamenor"); } if ($datamaior == "") { $datamaior = date("d/m/Y H:i:s"); } if ($tipo == "") { $tipo = "h"; } list ($diamenor, $mesmenor, $anomenor, $horamenor, $minutomenor, $segundomenor) = explode("[/: ]", $datamenor); list ($diamaior, $mesmaior, $anomaior, $horamaior, $minutomaior, $segundomaior) = explode("[/: ]", $datamaior); $segundos = mktime($horamaior, $minutomaior, $segundomaior, $mesmaior, $diamaior, $anomaior) - mktime($horamenor, $minutomenor, $segundomenor, $mesmenor, $diamenor, $anomenor); $diferenca = $segundos; switch ($tipo) { case "s": // Segundo $diferenca = $segundos; break; case "m": // Minuto $diferenca = $segundos / 60; break; case "H": // Hora $diferenca = $segundos / 3600; break; case "h": // Hora Arredondada $diferenca = round($segundos / 3600); break; case "D": // Dia $diferenca = $segundos / 86400; break; case "d": // Dia Arredondado $diferenca = round($segundos / 86400); break; } return $diferenca; } }