Tratando de solucionar los problemas de las fechas

Parecería que hay problemas con las fechas de las entradas. Si esto es un error circunstancial de Blogger o un cambio, nadie lo sabe. Por lo que puede verse, ha desaparecido uno de los formatos que podían elegirse en la Configuración | Formato | Formato de cabecera de fecha, el que los mostraba así: 16-oct-2009.


Entonces, quien emplea algún script para mostrar esa fecha de otro modo, ya sea como un calendario o como un texto formateado verán que la fecha o parte de ella se ve como undefined.

Hay muchas variantes de esos scripts y para solucionar el problema, no hay más remedio que entenderlos un poco. Este es un modelo standard:
var lafecha = cual.split('-');
fday = "<div class='caledia'>"+lafecha[0]+"</div>";
fmonth = "<div class='calemes'>"+lafecha[1]+"</div>";
fyear = "<div class='caleanio'>"+lafecha[2]+"</div>";
La primera línea separa la fecha en partes, usando, en este caso, un guión como separador. Es decir, si la fecha es 16-oct-2009, tendremos tres datos independientes:
el dia es lafecha[0] o sea 16
el mes es lafecha[1] o sea 10
el año es lafecha[2] o sea 2009
Si cambiamos el formato de la fecha (o nos fuerzan a hacerlo), deberemos cambiar el script para adaptarlo:

Si usamos 16/10/2009 (dia/mes/año) el separador que debemos buscar es la barra inclinada y el orden de los datos será: el dia es lafecha[0], el mes es lafecha[1] y el año es lafecha[2]

Si usamos 10/16/2009 (mes/dia/año) el separador que debemos buscar es la barra inclinada y el orden de los datos será: el mes es lafecha[0], el dia es lafecha[1] y el año es lafecha[2]

Si usamos 10.16.2009 (mes/dia/año) el separador que debemos buscar es un punto y el orden de los datos será: el mes es lafecha[0], el dia es lafecha[1] y el año es lafecha[2]

Si usamos 2009/10/16 (año/mes/dia) el separador que debemos buscar es la barra inclinada y el orden de los datos será: el año es lafecha[0], el mes es lafecha[1] y el día es lafecha[2]

Si usamos 2009-10-16 (año/mes/dia) el separador que debemos buscar es un guión y el orden de los datos será: el año es lafecha[0], el mes es lafecha[1] y el dia es lafecha[2]

En todos estos casos, el mes ya no se muestra como texto sino como un número así que deberemos agregar algo más para convertirlo:
var mes=new Array();
mes[1]="ene"; mes[2]="feb"; mes[3]="mar"; mes[4]="abr"; mes[5]="may"; mes[6]="jun";
mes[7]="jul"; mes[8]="ago"; mes[9]="sep"; mes[10]="oct"; mes[11]="nov"; mes[12]="dic";
El mes entonces será mes[lafecha[0]] o lafecha[X] dependiendo de cual sea el dato que la contenga

Si usamos el formato 16 octubre 2009 (dia/mes/año) el separador que debemos buscar es la barra inclinada y el orden de los datos será: el dia es lafecha[0], el mes es lafecha[1] y el año es lafecha[2]

Y deberemos "cortar" el texto del mes si sólo queremos usar tres caracteres para mostrarlo:
lafecha[1].substring(0,3));

Demasiadas variantes, ¿verdad? Me limito entonces a un modelo concreto, modificando el script de esta entrada. Selecciono entonces un nuevo formato de fecha en la Configuración de Blogger: elijo 16/10/2009 (dia/mes/año) y espero que dure y no la eliminen:
<script type='text/javascript'>
//<![CDATA[
var ultimaFecha;
var mes=new Array();
mes[1]="ene"; mes[2]="feb"; mes[3]="mar"; mes[4]="abr"; mes[5]="may"; mes[6]="jun";
mes[7]="jul"; mes[8]="ago"; mes[9]="sep"; mes[10]="oct"; mes[11]="nov"; mes[12]="dic";
function calendario(cual) {
if (cual == "") { cual = ultimaFecha; }
var lafecha = cual.split('/');
verCero=lafecha[0].substr(0,1); if (verCero == "0") { lafecha[0]=lafecha[0].substr(1) }
fday = "<div class='caledia'>"+lafecha[0]+"</div>";
fmonth = "<div class='calemes'>"+mes[parseFloat(lafecha[1])]+"</div>";
fyear = "<div class='caleanio'>"+lafecha[2]+"</div>";
document.write(fday+fmonth+fyear);
ultimaFecha = cual;
}
//]]>
</script>
Un detalle extra. El problema, también se evita eliminando <data:post.dateHeader/> y cambiando el dato a leer por <data:post.timestamp/> tal como se muestra en esta entrada.

0 comentarios:

Publicar un comentario