PABX da Simples IP
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

222 lines
7.2 KiB

<?php
// *
// * @author Andre Lourenco Pedroso - alp.pedroso@gmail.com
// *
// * @date 15 de Janeiro de 2007
// *
/**
*
* - Manipulacao de Data ou Hora.
*
* Operacoes: soma DIA, MES ,ANO, HORA, MINUTOS, SEGUNDOS.
* Formatos :
* Data: 15/01/2007
* Hora: 10:35:00
* Para subtrair, basta passar um valor negativo:
* Ex:
* $obj->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<EFBFBD>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;
}
}