El "cuadro de texto" es elemento HTML : TEXTAREA o INPUT type="text" ... y ...si se puede, y con Javascript seria lo mas adecuado ya que es visualizacion lo que pides.
Seria algo asi
Código Javascript
:
Ver original<form action="procesar.php" method="GET">
Fecha ?<br/>
<input type="text" id="fecha" onchange="formateador(this);"/>
</form>
<script language="JavaScript">
function valida_date(f)
{
var matches = /^(\d{2})[-\/]?(\d{2})[-\/]?(\d{4})$/.exec(f);
if (matches == null) return false;
var d = matches[2];
var m = matches[1] - 1;
var y = matches[3];
var composedDate = new Date(y, m, d);
return composedDate.getDate() == d &&
composedDate.getMonth() == m &&
composedDate.getFullYear() == y;
}
/*
@param: fecha en formato 'dmY', ej: 04062014
@return: fecha en formato 'Y/m/d'
*/
function formateador(elem)
{
f = elem.value;
console.log(valida_date(f));
if (!valida_date(f))
return false;
dia = f.slice(0,2);
mes = f.slice(2,4);
ano = f.slice(4,8);
f = ano+'/'+mes+'/'+dia;
elem.value = f;
}
</script>
Y DESDE PHP... te toca lo mismo ya que no puedes confiar en que JS este habilitado, asi que lo que necesitas en funciones:
Código PHP:
Ver original<?php
function valida_date($date,$format='dmY')
{
$f = DateTime::createFromFormat('dmY', $date);
$valid = DateTime::getLastErrors();
return ($valid['warning_count']==0 and $valid['error_count']==0);
}
/*
@param: fecha en formato 'dmY'
@return: fecha en formato 'Y/m/d'
*/
function format_converter($f)
{
if (!valida_date($f))
return false; // o lanzo excepcion
return $ano.'/'.$mes.'/'.$dia;
}
echo format_converter('04062014'); // 2014/06/04
echo format_converter('85062014'); // (false)
Las funciones se pueden compactar.....es ver la idea