Na enorme maioria das vezes você fará validações de datas em códigos no lado do cliente, por exemplo através de uma função Javascript, mas se por alguma razão você precisar validar no lado do servidor, o PHP tem uma função interessante para isso, que é a checkdate. Vamos a um exemplo que supõe o recebimento de uma data, a divide em dia, mês e ano, então efetua a validação:
<?php
$dataRecebida = "15/12/2004";
$partes = explode("/", $dataRecebida); //Quebrando a data em partes, que serão o dia, mês e ano
$dataValida = checkdate($partes[1],$partes[0],$partes[2]);
echo($dataValida);
?>
A função checkdate vai retornar o valor 1 caso a data seja válida e retornará um valor vazio caso seja inválida.
Caso o dado fornecido para a função tenha o dia com valor 32 ou o mês com o valor 13, ela retornará o valor vazio. Apenas como observação, o mês de fevereiro é corretamente validado como o máximo de 29 dias e não 30 ou 31. É uma função bastante interessante e que pode gerar um grande ganho de tempo durante o desenvolvimento.
Outras dicas de PHP
Apagando variáveis de sessão
array_reverse - Invertendo um vetor
array_search - Procurando um item em um array
Capturando a extensão de um arquivo
Capturando dados de um checkbox
Casts - Convertendo tipos de dados
ceil - Arredondando números reais para cima
checkdate - Validando datas no código PHP
Como desabilitar checkbox
Como desabilitar um radiobutton
Como permitir somente o upload de imagens
Como remover espaços em branco de uma string
Como validar o upload de um arquivo via POST
Convertendo caracteres com acento para maiúsculo com mb_strtoupper
Corrigindo a formatação da página para exibir acentos
Corrigindo o erro 'invalid byte sequence for encoding' ao acessar o Postgres
Criando e lendo um cookie em PHP
Criando variáveis de sessão
Date - Exibindo horário em formato hh:mm:ss
define - Criando constantes
Desabilitando as mensagens de Deprecated Functions
empty - Verificando se variável está vazia
Entendendo as diferenças entre os comandos include e require
Entendendo as diferenças entre os comandos include_once e require_once
Exibindo uma imagem após o post
floor - Arredondando números reais para baixo
gettype - Obtendo o tipo de dado de uma variável
Impedindo SQL Injection
Imprimindo Arrays
join - Convertendo um array em string
max - Encontrando o maior elemento de um vetor
min - Encontrando o menor elemento de um vetor
mt_rand - Gerando números randômicos
number_format - Formatando números
Operador ternário
Passando caracteres especiais por GET
Passando dados por QueryString
Permitindo o upload somente de arquivos PDF e do Word
Redirecionando para outras páginas
Removendo acentos em PHP
Removendo cookies em PHP
Retornando para a página anterior
Round - Arredondando números float
Rsort - Ordenando os itens de um vetor em ordem alfabética decrescente
session_write_close - gravando dados e fechando a sessão
shuffle - Embaralhando elementos de um array
Sizeof - Contando os elementos de um vetor
Sort - Ordenando os itens de um vetor
strtolower - Deixando todos os caracteres em minúsculo
strtoupper - Deixando todos os caracteres em maiúsculo
str_replace - Substituindo caracteres em uma string
Trabalhando com datas em PHP
ucfirst - Deixando o primeiro caractere sempre maiúsculo
ucwords - Deixando o primeiro caractere de cada palavra maiúsculo
unset - Excluindo variáveis
unset - Removendo elementos de um array
var_dump - Analisando as variáveis
Você Sabia?
River Raid

O épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.
Senhas

Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.
Final Fantasy

O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.
Tetris

O título Tetris detém o recorde de jogo mais adaptado de todos os tempos. No total foram mais de 60 plataformas diferentes que receberam alguma versão do quebra-cabeças criado por Alexey Pajitnov. Conheça mais sobre este incrível jogo clicando aqui.
Máquina de Pascal

A Máquina de Pascal, criada em 1642 pelo filósofo, físico e matemático francês Blaise Pascal, é reconhecida como o primeiro computador do mundo e ele foi criado com o objetivo de calcular impostos. Saiba mais.
