|
|
|
|
<?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 (ereg($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 (ereg($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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|