Quando o assunto é comparação de strings em PHP, muitos logo pensam em utilizar o operador de igualdade (==), porém a forma mais efeciente e precisa de se fazer isto, é utilizar as funções oferecidas pelo próprio PHP, dentre as quais, as mais populares são: strcmp() e strcasecmp(). Show Vamos as explicações: strcmp(string $str1, string $str2) -> Recebe duas strings como parâmetro. Retorna < 0 se a $str1 for menor que $str. Retorna > 0 se $str1 for maior que a $str2 e finalmente, retorna 0, se as duas strings forem iguais. strcasecmp(string $str1, string $str2) -> Idêntica a função strcmp(), com a diferença que a strcmp() diferencia maiúsculas e minúsculas, e a função strcasecmp() não diferencia maiúsculas e minúsculas. Vamos aos exemplos:
Até a próxima 😉
❮ PHP Variable Handling Reference
Return the type of different variables: <?php $a = 3;echo gettype($a) . "<br>";$b = 3.2;echo gettype($b) . "<br>"; $c = "Hello";echo gettype($c) . "<br>";$d = array();echo gettype($d) . "<br>";$e = array("red", "green", "blue");echo gettype($e) . "<br>";$f = NULL;echo gettype($f) . "<br>"; $g = false;echo gettype($g) . "<br>"; ?> Try it Yourself »Definition and UsageThe gettype() function returns the type of a variable. SyntaxParameter Values
Technical Details
Vou fazer um manual bem detalhado de como trabalhar com datas em PHP. Nesse manual você irá aprender, não só os formatos, mas como comparar as datas, como saber se o ano é bissexto, criar funções, para buscar uma data daqui 1 mês, outra data daqui 1 ano. Tudo de uma maneira simples e fácil e será possível fazer DOWNLOAD do SCRIPT em funções ou apenas uma classe chamada DATA. 1) Formatar data em PHP em PT BRSe tem algo que para todo programador às vezes é complicado é trabalhar com datas em PHP e na verdade é algo extremante simples. O formato de entrada de data no MYSQL é AAAA-MM-DD, por exemplo 2017-02-04, mas como vou colocar no formato DD/MM/AAAA? Essa e outras dúvidas vou esclarecer para vocês. Vou ensinar para vocês como tratar datas em PHP de uma maneira simples. Vou escrever códigos simples em FUNÇÃO e também em CLASSE. Você também poderá fazer DOWNLOAD da classe DATA no meu site. Primeiro vamos entender como funcionam datas em PHP. Nativo do PHP existe a função DATE se eu colocar parâmetros dentro dela ela escreverá a data como eu quiser. Exemplo: Y = em 4 dígitos Abaixo todos parâmetros de data que existem, essa informação foi retirada do site PHP.NET.
Retirado do site PHP.NET os que estão em NEGRITO são os mais utilizados para datas no formato Português do Brasil. Os que iremos usar mais são os formatos que darão entrada no MYSQL e irá te ajudar na programação. Então vamos lá. Campo DATE no MYSQL a entrada tem que ser 2017-02-04, DATETIME a entrada tem que ser 2017-02-04 13:12:18, como seria tudo isso em código data? <? date("Y-m-d") date("Y-m-d H:i:s") ?> Ambos formatos a saída será a acima. Porém para exibição como eu faço? Infelizmente o PHP não tem tradução para o português, mas eu fiz vários Scripts para esse tratamento e vou ensinar aqui para vocês. Atenção para escrever esses scripts abaixo é necessário conhecer ARRAYS e ou MATRIZ, senão conhecer, clique no link das palavras acima para ler e entender o que seria MATRIZ e ou ARRAY. 2) Função para converter formato AAAA-MM-DD para DD/MM/AAAA<?php //converte DD/MM/AAAAA para AAAA-MM-DD function formata_data_banco($data) { //converte data dd/mm/aaaa para aaaa-mm-dd if ($data == "") return null; $corrige = explode("/", $data); $corrige = $corrige[2]."-".$corrige[1]."-".$corrige[0]; return $corrige; } //converte DD/MM/AAAAA para AAAA-MM-DD function formata_data_br($data) { //converte aaaa-mm-dd para dd/mm/aaaa if ($data == "") return ""; $corrige = explode("-",$data); $corrige = $corrige[2]."/".$corrige[1]."/". $corrige[0]; return $corrige; } ?>A primeira função converte a data do formato brasileiro para o banco de dados. Existe uma função no PHP chamada EXPLODE que transforma uma STRING em uma MATRIZ através de uma STRING delimitadora. Eu usei como STRING delimitadora no primeiro SCRIPT o /, pois ele quebrou a STRING DD/MM/AAAA em três pedaços AA MM DDDD e depois reescrevi a data com a saída dos pedaços, sendo que como sabemos uma MATRIZ começa com o índice 0, então temos três pedaços a primeira STRING quebrada tem o índice 2, pois o ANO estava no final, a string MES será na posição 1 e a terceira STRING será na posição 0. Então reescrevo da maneira acima. E para fazer o INVERSO, criei uma outra função usando a STRING delimitadora o - que era repetido e reescrevi da mesma maneira. Abaixo segue uma série de script que criei usando a mesma lógica, usando PEDAÇOS de string para escrever DATA. <?php //extrai aaaa-mm-dd de aaaa-mm-dd H:M:S function get_data_datetime($data) { if ($data == "") return ""; $ano = explode(" ",$data); $corrige = $ano[0]; return $corrige; } //converte aaaa-mm-dd h:m:s para dd/mm/aaaa H:m:s function formata_data_br_time($data) { if ($data == "") return ""; $corrige = explode("-",$data); $ano = explode(" ",$corrige[2]); $corrige = $ano[0]."/".$corrige[1]."/". $corrige[0]." - ".$ano[1]; return $corrige; } //extrai h:m:s de aaaa-mm-dd h:m:s function get_hora_time($data) { if ($data == "") return ""; $corrige = explode("-",$data); $ano = explode(" ",$corrige[2]); $corrige = $ano[1]; return $corrige; } function get_data_br_time($data) { //converte aaaa-mm-dd para dd/mm/aaaa if ($data == "") return ""; $corrige = explode("-",$data); $ano = explode(" ",$corrige[2]); $corrige = $ano[0]."/".$corrige[1]."/". $corrige[0]; return $corrige; } ?>3) Converter para PortuguêsOutro grande problema que o PHP não traduz automática para o Português. Por isso você precisará do SCRIPT abaixo para tradução de Mês e Dia da Semana. Abaixo explico como escrevi esses SCRIPTS. <?php // converte o dia da semana conseguido pelo date("w") para texto em português. Vendo a tabelinha acima vemos que WEEKDAY function get_semana_pt($semana) { $semana = intval($semana);//CONVERTE PARA INTEIRO $arr = array('Domingo','Segunda-Feira','Terça-Feira','Quarta-Feira','Quinta-Feira','Sexta-Feira','Sábado'); return $arr[$semana]; } // Função para mês fiz diferente, porque, se fizesse o ARRAY igual fiz acima, começaria no INDICE 0 e daí teria que somar +1 para sair corretamente, então preferi escrever o script abaixo function get_mes_pt($m) { $m = intval($m);//CONVERTE PARA INTEIRO $or[1] = "Janeiro"; $or[2] = "Fevereiro"; $or[3] = "Março"; $or[4] = "Abril"; $or[5] = "Maio"; $or[6] = "Junho"; $or[7] = "Julho"; $or[8] = "Agosto"; $or[9] = "Setembro"; $or[10] = "Outubro"; $or[11] = "Novembro"; $or[12] = "Dezembro"; return $or[$m]; } ?>Agora olha que maneira interessante de escrever Sábado, 04 de fevereiro de 2017 em script, olha como seria! <?= get_semana_pt($semana).", ".date("d")." de ".get_mes_pt(date("m"))." de ".date("Y") ?>Veja como é bem simples. 4) Comparar datasOutra coisa que todo programador acha complicado é comparar uma data com a outra. Se eu fizer o script abaixo, ele não irá funcionar, pois estarei comparando STRINGS e não datas. <?php if(date("Y-m-d") == '2017-02-04'){Para fazer uma comparação correta irei codificar a data em STRTOTIME é uma função nativa do PHP que converte a data em timestamp em UNIX (número em segundos desde 01/01/1970 00:00:00). A saída serão números então consigo comparar. Veja um exemplos abaixo de como parar datas. <?php $dt1 = strtotime(date("Y-m-d")); $dt2 = strtotime('2017-02-04'); if($dt1 == $dt2){ echo "as datas são iguais"; }else{ echo "diferente"; } ?>Converti as datas em STRTOTIME que a saída serão números e consigo comparar se são iguais (==) ou (>) maior ou (<) menor. É possível trabalhar com comparações através de STRTOTIME, porém existe ALGO MUITO IMPORTANTE, as versões chamadas PHP6 = 5.4 e PHP7 = 5.6 Se eu não delimitar a TIMEZONE não funciona simplesmente. Então antes de fazer a comparação deverá se adicionar a linha abaixo, veja. <? date_default_timezone_set('America/Sao_Paulo'); ?>Essa linha irá apenas converter o formato de datas para America São Paulo, dizendo que estou no Brasil, no fuso horário de São Paulo. 5) Descobrir data futura ou passada com PHPEntão com STRTOTIME + DATE é possivel descobrir uma data futura ou passada com com as funções DATE e o STRTOTIME. Vamos então ver qual o código para descobrir AMANHÃ, ONTEM, a data de hoje daqui 1 mês, a data de hoje há um mês atrás, há um ano atrás e por aí vai. <?php echo strtotime("now")."<br />";echo strtotime("02 February 2017")."<br />";echo strtotime("+1 day")."<br />";echo strtotime("+1 week")."<br />";echo strtotime("+1 week 2 days 4 hours 2 seconds")."<br />";echo strtotime("next Thursday")."<br />";echo strtotime("last Monday")."<br />"; ?> A saída será: 1486315300 1486000800 1486401700 1486920100 1487107302 1486605600 1485741600 Mas como fazer isso sair no formato que eu quero, mesmo, por exemplo quero imprimir a data de amanhã como 05/02/2017. Segue abaixo a combinação de DATE + STRTOTIME. A) Acrescendo DIASÉ extremamente simples veja: echo date('Y-m-d', strtotime("now"))); echo date('Y-m-d', strtotime("yesterday"))); echo date('Y-m-d', strtotime("tomorrow"))); echo date('Y-m-d', strtotime("+1 days", strtotime('2017-02-04'))); echo date('Y-m-d', strtotime("-1 days", strtotime('2017-02-04'))).;A saída será a seguinte: 2017-02-04 2017-02-03 2017-02-05 2017-02-05 2017-02-03 Se eu quisesse que a saída saisse no formato BR, era muito simples a troca. echo date('d/m/Y', strtotime("+1 days", strtotime("now"))); echo date('d/m/Y', strtotime("+1 days", strtotime("yesterday")));04/02/2017 B) Acrescendo MESESecho date('Y-m-d', strtotime("+1 month", strtotime('2017-02-04')))."<br />"; echo date('Y-m-d', strtotime("-1 month", strtotime('2017-02-04')))."<br />";A saída será a seguinte: 2017-03-04 C) Acrescendo Anosecho date('Y-m-d', strtotime("+1 year", strtotime('2017-02-04')))."<br />"; echo date('Y-m-d', strtotime("-1 year", strtotime('2017-02-04')))."<br />";A saída será a seguinte: 2018-02-04 Espero que essas dicas tenham te ajudado. Até mais! Prof. Daniela Pires Programadora Web PHP / CSS3 / AJAX-QUERY / HTML5 / SEO Professora de Programação Web e Banco de Dados Pós Graduada em Consultoria em Tecnologia Web pela Impacta Autor(es): Daniela Pires (04/02/2017) |