Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

Soma datas pt-br

Recommended Posts

Pessoal eu criei uma classe de manipular datas onde ela: soma, subtrai, compara, tira a diferença, converte, valida etc...

 

mas vou postar aqui algumas partes porque fica mais facil para quem quer aprender, em vez de só usar a classe, entao vou postar aqui a função que soma a data

 

<?php

function valida_data($data)
{
$data = trim($data);
if(preg_match("@^\d{2}/\d{2}/\d{4}$@", $data)) {
	$arr = explode("/", $data);
	return !checkdate($arr[1], $arr[0], $arr[2]) ? false : true;		
}	
if(preg_match("@^\d{4}-\d{2}-\d{2}$@", $data)) {
	$arr = explode("-", $data);
	return !checkdate($arr[1], $arr[2], $arr[1]) ? false : true;		
}
if(preg_match("@^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$@", $data)) {
	$arr = explode("-", $data);
	$dia = substr($arr[2], 0, 2);
	return !checkdate($arr[1], $dia, $arr[0]) ? false : true;		
}	
return false;
}   

function converter_data($data)
{
$data = trim($data);
if(preg_match("@^\d{4}-\d{2}-\d{2}$@", $data)) {
	return $data;
}
if(preg_match("@^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$@", $data)) {
	return $data;
}	
if(preg_match("@^\d{2}/\d{2}/\d{4}$@", $data)) {
	return implode("-", array_reverse(explode("/", $data)));
}	
else {
	echo "data invalida";
	exit;
}	
} 

function soma_data($data, $add)
{
$add  = trim($add);
$data = trim($data);
$data = preg_replace("#(agora|hoje|atual)#i", date("Y-m-d H:i:s"), $data);
$data = converter_data($data);
if(valida_data($data)) {		
	$add = preg_replace("#semana[s]?#i", "week", $add);
	$add = preg_replace("#m(e|[ê])s(es)?#i", "month", $add);
	$add = preg_replace("#ano[s]?#i", "year", $add);
	$add = preg_replace("#dia[s]?#i", "days", $add);	
	$add = preg_replace("#hora[s]?#i", "hours", $add);
	$add = preg_replace("#minuto[s]?#i", "minutes", $add);
	$add = preg_replace("#segundo[s]?#i", "seconds", $add);

	//$data = getdate(strtotime("$data +$add"));	
	setlocale(LC_TIME,"portuguese");

	$data = strftime("%A %B %Y %c %j", strtotime("$data +$add"));
	$arr  = explode(" ", $data);
	$datas["semana"] = $arr[0];

	$arr2 = explode("/", $arr[3]);
	$dia = $arr2[0];
	$mes = $arr2[1];
	$ano = $arr2[2];
	$datas["dia"]	 = sprintf("%02d", $dia);		
	$datas["mes"][1]  = $arr[1];
	$datas["mes"][2]  = sprintf("%02d", $mes);
	$datas["ano"]	 = $ano;
	$arr3			 = explode(":", $arr[4]);
	$datas["hora"]	= $arr3[0];
	$datas["minuto"]  = $arr3[1];
	$datas["segundo"] = $arr3[2];
	$datas["dia_ano"] = $arr[5];		

	return $datas;
} else {
	echo "Data invalida";
}	
}

print_r(soma_data("2006-02-15 18:28:14", "5 minutos"));

?>

 

 

Resultado um array contendo as data e hora no padrao brasileiro

 

resultado:

Array
(
[semana] => quarta-feira
[dia] => 15
[mes] => Array
	(
		[1] => fevereiro // mes escrito
		[2] => 02 // mes numerico
	)

[ano] => 2006
[hora] => 18
[minuto] => 33
[segundo] => 14
[dia_ano] => 046 // numero de dias que se passaram de janeiro ate a data
)

 

MODO DE USAR:

é bem simples eu passei para o portugues assim é facil você querer somar a data só passar o que você quer exemplos de uso:

 

obs: pode digitar tanto maiusculas e minusculas no plural ou no singular a função é um pouco inteligente :D

 

tanto faz passar a data 00/00/0000 ou 0000-00-00 da na mesma

 

print_r(soma_data("2006-02-15 18:28:14", "5 minutos"));

print_r(soma_data("2006-02-15 18:28:14", "1 dia"));

print_r(soma_data("2006-02-15 18:28:14", "28 dias"));

print_r(soma_data("2006-02-15 18:28:14", "10 semanas"));

print_r(soma_data("2006-02-15 18:28:14", "1 mes"));

print_r(soma_data("2006-02-15 18:28:14", "6 horas"));

print_r(soma_data("2006-02-15 18:28:14", "3600 segundos"));

print_r(soma_data("2006-02-15 18:28:14", "1 ano"));

 

 

// percebam os espaços abaixo depois de "dias" caso acidentalmente alguem de um espaço por engano o sistema vai entender normalmente

 

print_r(soma_data("2006-02-15 18:28:14", "5 dias "));

print_r(soma_data("2006-02-15 18:28:14", " 3 dias "));

 

data atual percebam "agora", "hoje", "atual"

 

print_r(soma_data("agora", "3 dias"));

print_r(soma_data("hoje", "2 segundos"));

print_r(soma_data("atual", "3 meses"));

 

dai com o resultado num array nao precisa nem falar né?, é só você pegar e montar a saida da data do jeito que precisar pode usar ucfirst() para deixar mais apresentavel o dia da semana etc..., assim você tem um leque de possibilidades

 

bom ta ai usem a vontade e em caso de duvidas sobre o script só postar

e quem quiser melhorar ou criticar fiquem a vontade tbm

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bom esse scrpt, era isso que estava procurando. Mas desculpe-me novamente a ignorancia. está ocorrendo o seguinte erro:

 

----------------------------------------------------------------------------------------------------

Notice: Undefined offset: 1 in /var/www/html/login/soma_data.php on line 64

 

Notice: Undefined offset: 2 in /var/www/html/login/soma_data.php on line 65

 

Notice: Undefined offset: 1 in /var/www/html/login/soma_data.php on line 72

 

Notice: Undefined offset: 2 in /var/www/html/login/soma_data.php on line 73

Array ( [semana] => Sexta [dia] => 00 [mes] => Array ( [1] => Dezembro [2] => 00 ) [ano] => [hora] => 15 [minuto] => [segundo] => [dia_ano] => Dez )

 

--------------------------------------------------------------------------------------------------------

Não sei como resolver http://forum.imasters.com.br/public/style_emoticons/default/natal_sad.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi fabyo belezagente boa estou com um problema para pegar a data atual:

else { $data_limit = print_r(soma_data($inicio, "3 dias")); if($data_limit >= date()){ // dá um erro e um notice nesta linha e exibe um arry echo'<li><img src="banners/banner_reservado.png" alt="Banner Anuncio com espaço reservado"" /></li>'; }

Notice: Undefined index: banner in C:\Apache\www\abrace\index.php on line 417Array ( [semana] => sábado [dia] => 19 [mes] => Array ( [1] => maio [2] => 05 ) [ano] => 2007 [hora] => 00 [minuto] => 00 [segundo] => 00 [dia_ano] => 139 ) Warning: date() expects at least 1 parameter, 0 given in C:\Apache\www\abrace\index.php on line 443

como faço para pegar a data atual e evitar estes erros.desde ja obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera dei uma melhorada ai no codigo, na verdade arrumei pra aparecer tudo certim e mudei algumas coisa, o codigo vai abaixo

 

<?php

 

function valida_data($data)

{

$data = trim($data);

if(preg_match("@^\d{2}/\d{2}/\d{4}$@", $data)) {

$arr = explode("/", $data);

return !checkdate($arr[1], $arr[0], $arr[2]) ? false : true;

}

if(preg_match("@^\d{4}-\d{2}-\d{2}$@", $data)) {

$arr = explode("-", $data);

return !checkdate($arr[1], $arr[2], $arr[1]) ? false : true;

}

if(preg_match("@^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$@", $data)) {

$arr = explode("-", $data);

$dia = substr($arr[2], 0, 2);

return !checkdate($arr[1], $dia, $arr[0]) ? false : true;

}

return false;

}

 

function converter_data($data)

{

$data = trim($data);

if(preg_match("@^\d{4}-\d{2}-\d{2}$@", $data)) {

return $data;

}

if(preg_match("@^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$@", $data)) {

return $data;

}

if(preg_match("@^\d{2}/\d{2}/\d{4}$@", $data)) {

return implode("-", array_reverse(explode("/", $data)));

}

else {

echo "data invalida";

exit;

}

}

 

function soma_data($data, $add)

{

$add = trim($add);

$data = trim($data);

$data = preg_replace("#(agora|hoje|atual)#i", date("Y-m-d H:i:s"), $data);

$data = converter_data($data);

if(valida_data($data)) {

$add = preg_replace("#semana?#i", "week", $add);

$add = preg_replace("#m(e|[ê])s(es)?#i", "month", $add);

$add = preg_replace("#ano?#i", "year", $add);

$add = preg_replace("#dia?#i", "days", $add);

$add = preg_replace("#hora?#i", "hours", $add);

$add = preg_replace("#minuto?#i", "minutes", $add);

$add = preg_replace("#segundo?#i", "seconds", $add);

 

//$data = getdate(strtotime("$data +$add"));

setlocale(LC_TIME,"portuguese");

 

$data = strftime("%A %B %Y %c %j", strtotime("$data +$add"));

$arr = explode(" ", $data);

 

 

$dia = $arr[4];

$mes = $arr[1];

$ano = $arr[6];

 

if($arr[0] == "Sábado" || $arr[0] == "Domingo")

{

$datas["semana"] = $arr[0];

}

else //dia escrito

{

$datas["semana"] = $arr[0] ." - feira";

}

 

$datas["dia"] = sprintf("%02d", $dia); //dia numero

 

$datas["mounth"] = $arr[1]; //mes escrito

 

switch($datas["mounth"]) { //mes numero

case Janeiro:

$datas["mes"] = "01"; break;

case Fevereiro:

$datas["mes"] = "02"; break;

case Março:

$datas["mes"] = "03"; break;

case Abril:

$datas["mes"] = "04"; break;

case Maio:

$datas["mes"] = "05"; break;

case Junho:

$datas["mes"] = "06"; break;

case Julho:

$datas["mes"] = "07"; break;

case Agosto:

$datas["mes"] = "08"; break;

case Setembro:

$datas["mes"] = "09"; break;

case Outubro:

$datas["mes"] = "10"; break;

case Novembro:

$datas["mes"] = "11"; break;

case Dezembro:

$datas["mes"] = "12"; break;

}

 

$datas["ano"] = $ano; //ano

$arr2 = explode(":", $arr[7]); //divide as horas

$datas["hora"] = $arr2[0]; //hora

$datas["minuto"] = $arr2[1]; //minuto

$datas["segundo"] = $arr2[2]; //Segundo

$datas["dia_ano"] = $arr[9]; //anos a partir do começo do ano

 

return $datas;

} else {

echo "Data invalida";

}

}

 

 

print_r(soma_data("2007-01-23 18:28:14", "10 dia"));

 

 

?>

Ai é so pegar os arrays e pronto, funfa de boa e manipula do jeito que quiser, Qualquer coisa tamo ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.