Função php para converter datas

Hoje vou postar uma função que fiz a algum tempo e que na maioria das vezes me auxilia em projetos que esteja desenvolvendo. Trata-se de uma função responsável por converter datas em formatos convencionais para formatos aceitos pelo banco de dados e vice-versa.

Como todos sabem, nós brasileiros trabalhamos com datas em nossos dia-a-dia no formato dia/mes/ano (Ex: 31/12/2011). Porém os bancos de dados (como não são desenvolvidos no Brasil) trabalham com outros formatos, geralmente no esquema ano-mes-dia (Ex: 2011-12-31).

Então como fazer para que o usuário preencha a data como está acostumado, mas o sistema salve no banco de dados no formato que ele aceite?

É aí que entra a função. Vamos a ela e depois explico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function converteData($data){
       if (strstr($data, "/")){//verifica se tem a barra /
           $d = explode ("/", $data);//tira a barra
           $rstData = "$d[2]-$d[1]-$d[0]";//separa as datas $d[2] = ano $d[1] = mes etc...
           return $rstData;
       }
       else if(strstr($data, "-")){
          $data = substr($data, 0, 10);
          $d = explode ("-", $data);
          $rstData = "$d[2]/$d[1]/$d[0]";
          return $rstData;
       }
       else{
           return '';
      }
}
?>

A função deve receber como parâmetro uma data (não importa o formato). Aí ela verifica se a data recebida possui barras. Se sim, ele retira as barras com a função explode e joga o dia, mês e ano dentro de um array. Depois gera uma nova string, agora no formato com traços e ordenados por ano, mês e dia.

Caso a data recebida não tenha as barras, ele faz uma verificação pra ver se ela tem traços. Em caso afirmativo, ele faz o processo inverso, ou seja, retira os traços, joga as informações dentro de um array e depois gera a nova data com barras e na ordem dia, mês e ano.

Se a data passada no parâmetro não tiver nem barras e nem traços, a função retorna um valor vazio.

Veja 2 exemplos de utilização da função:

1
2
3
4
5
6
7
8
9
10
<?php
//Exemplo 1
$data_br = "03/06/2011";
$data_banco = converteData($data_br);
echo $data_banco; //vai imprimir 2011-06-03
 
//Exemplo 2
$data1 = converteData("2011-12-31");
echo $data1; //vai imprimir 31/12/2011
?>

E é isso aí. Função simples mas que pode ajudar bastante.

Abs.

Siga-me no twitter: @rafaelwendel

É formado em Sistemas de Informação, pós-graduado em Sistemas de Banco de Dados e mestre em Educação com foco em Tecnologias Sociocomunitárias. Trabalha como professor de ensino técnico e tecnológico no Instituto Federal de Educação, Ciência e Tecnologia de São Paulo ministrando disciplinas nas áreas de programação, banco de dados, desenvolvimento de projetos e engenharia de software.

Posts relacionados

Comentários

  1. Show de bola! E o melhor de tudo usando apenas uma funçaõ para os dois formatos de data, estava procurando isso e confesso q esta é a melhor opção, parabens!

  2. Cara, impressionante que quando uma coisa é bem feita, dura por muito e muito tempo. A primeira vez que usei esse código foi em 2011, depois precisei em outros projetos e sempre utilizava a mesma função. Hoje, sem acesso ao meu HD, precisei de novo e o google me trouxe para o seu site novamente hahaha. Good Job!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *