Fabyo 66 Denunciar post Postado Fevereiro 15, 2006 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
elizeu 0 Denunciar post Postado Fevereiro 15, 2006 MUito bom.. tava precisando de um trem desses a algum tempo... jaja irei utiliza-la.. vlw.. como sempre... so scripts da hora Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Fevereiro 15, 2006 Fabão matou tudo com uma tacada só muito boa mesmo... Compartilhar este post Link para o post Compartilhar em outros sites
Epyllion 0 Denunciar post Postado Fevereiro 15, 2006 Uma imagem vale mais do mil palavras .... :blink: http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif :huh: :mellow: :o http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif Parabéns. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites
Douglas 6 Denunciar post Postado Fevereiro 15, 2006 Sem comentários.. Compartilhar este post Link para o post Compartilhar em outros sites
Illidan 0 Denunciar post Postado Fevereiro 15, 2006 Excelente, mesmo... ótimo trabalho! :worship: Compartilhar este post Link para o post Compartilhar em outros sites
SiLLeNt 0 Denunciar post Postado Fevereiro 15, 2006 na boa caratu pavoro nessa agora em fabyoauiauuaui Compartilhar este post Link para o post Compartilhar em outros sites
Sergio R 0 Denunciar post Postado Dezembro 15, 2006 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
DetonationS 0 Denunciar post Postado Dezembro 22, 2006 Cara esse script fico espetacular!Muito mais prático agora...Cada script melhor que o outro hein??Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
pcdesign 0 Denunciar post Postado Maio 17, 2007 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 443como 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
rodriguetes 0 Denunciar post Postado Agosto 24, 2007 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