Fecha del servidor vs fecha local


http://www.asptutor.com

Fecha del servidor vs fecha local

 

Colaboración enviada por Cristian Monzon

Cuando queremos mostrar la fecha actual en nuestra pagina web nos encontramos con la posibilidad
de utilizar la fecha del servidor (con ASP) o la fecha del ordenador cliente (Con JScript o VBScript).

El siguiente script pretende utilizar la hora del ordenador cliente a excepcion que esta se encuentre demasiado
desfazada. Teniendo en cuenta que el maximo desface puede ser de un dia muestro siempre la hora del ordenador
local (Con JavaScript) y solo la del servidor (con ASP) cuando la diferencia por defecto o por exceso es de mas de un dia.

<%Option explicit%>
<HTML>
<HEAD><TITLE>Fecha</TITLE></HEAD>
<BODY>
<%

Dim ArrayFecha,ArrayHora,Anyo,Dia,Fecha,Hora,Mes,Minutos,Segundos

' Obtengo la fecha del servidor 
Fecha=Date()
ArrayFecha = split(cdate(Fecha),"/")

' Obtengo dia, mes y año.
Dia=ArrayFecha(0)
Mes=ArrayFecha(1)
Anyo=ArrayFecha(2)
' Atencion !!! Dado que algunos servidores utilizan el 
'formato de fecha ingles mm/dd/aa la siguiente funcion puede cambiar de la siguiente manera.
' Dia=ArrayFecha(1)
' Mes=ArrayFecha(0)
' Anyo=ArrayFecha(2)

' De hecho mi servidor local tiene configuracion española y 
'la web en donde tengo alojada lo tiene en formato ingles
' lo que me ha obligado a poner un condicion de acuerdo 
'al entorno donde se este ejecutando usando la variable 
' Request.ServerVariables("SERVER_NAME")  :-)

' Obtengo la hora del servidor
Hora=Time()
ArrayHora = split(cdate(Hora),":")
Hora=ArrayHora(0)
Minutos=ArrayHora(1)
Segundos=ArrayHora(2)


function fechaASP()
' Esta funcion devuelve la fecha del servidor en formato largo 
dim meses(12)
meses(0)=""
meses(1)="enero"
meses(2)="febrero"
meses(3)="marzo"
meses(4)="abril"
meses(5)="mayo"
meses(6)="junio"
meses(7)="julio"
meses(8)="agosto"
meses(9)="setiembre"
meses(10)="octubre"
meses(11)="noviembre"
meses(12)="diciembre"
fechaASP=Dia+" de "+meses(Mes)+" del "+Anyo
end function

%>
<br>
<script language="JavaScript">
<!--

function fechaJavaScript(Anyo,Mes,Dia) {
// Esta funcion devuelve la fecha local en formato largo
//NOTA: las siguientes 2 sentencias van juntas en la misma linea
var meses = new Array("","enero","febrero","marzo","abril","
mayo","junio","julio","agosto","setiembre","octubre","noviembre","diciembre")

fechaJavaScript=Dia+" de "+meses[Mes+1]+" del "+Anyo
return fechaJavaScript
}

var hoy = new Date();
var Anyo= hoy.getYear();
var Mes= hoy.getMonth();
var Dia= hoy.getDate();
var Hora=hoy.getHours();
var Minutos=hoy.getMonth();
var Segundos=hoy.getSeconds();
var DiaSemana=hoy.getDay();

// Obtengo la fecha y hora local
//NOTA: las siguientes 2 sentencias van juntas en la misma linea
var TimeLocal = new Date(Anyo,Mes,Dia,Hora,Dia,Segundos);
var TimeServer = new Date(<%=Anyo%>,<%=(Mes-1)%>,<%=Dia%>,<%=Hora%>,
<%=Minutos%>,<%=Segundos%>);

// Calculo la diferencia en milisegundo y lo transformo en dias
var TimeDifference = (TimeLocal - TimeServer)/60/60/24/1000;

// Compruebo que la diferencia de fechas y hora no sea superior o inferior a un dia.
if (Math.abs(TimeDifference)<=1) { 
    // La fecha del ordenador local es razonable. 
document.write("Hoy es: " + fechaJavaScript(Anyo,Mes,Dia))
} else {
// La fecha del ordenador local esta demasiado desfazada. Utilizo la fecha del servidor.
document.write("Hoy es: <%=fechaASP%>")
}
//-->
</script>
</BODY>
</HTML>