95 messaggi dal 04 settembre 2007
Buongiorno,

Ho creato una webform senza masterpage(Default2.aspx) dove ho inserito il codice qui sotto riportato

dentro i tag head ho inserito questo codice:

<script type="text/javascript">
var currenttime = Date(<% DateTime.Now.ToString() %>)
var montharray=new Array("Gennaio","Febraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre")
var serverdate=new Date(currenttime)

function padlength(what){
var output=(what.toString().length==1)? "0"+what : what
return output
}

function displaytime(){
serverdate.setSeconds(serverdate.getSeconds()+1)
var datestring=padlength(serverdate.getDate())+" "+montharray[serverdate.getMonth()]+" "+serverdate.getFullYear()
var timestring=padlength(serverdate.getHours())+":"+padlength(serverdate.getMinutes())+":"+padlength(serverdate.getSeconds())
document.getElementById("servertime").innerHTML= datestring+" "+timestring
}

window.onload=function(){
setInterval("displaytime()", 1000)
}
</script>


mentre i tag body ho inserito questo codice

<p><b>Server Time:</b> <span id="servertime"></span></p>


in questo modo io vedo l'ora del server ma non quello che cerco io e cioè:

Ho pubblicato questa pagina su un ftp che si trova su un server di aruba ( che io ho noleggiato per il mio lavoro visto che faccio servizio di hosting ai miei clienti).

Ora...

se io guardo la pagina utilizzando il browser che ho installato sul server che io ho noleggiato (dove si trova il mio hosting) di aruba io vedo l'ora di quel server.

se guardo la stessa pagine dal mio computer locale e e quindi digitando http://www.dominio.it/Default2.aspx io vedo l'orario del mio computer locale che è sincronizzato con quello del mio sever locale .

Ora la mia domanda è questa ......


Come faccio a fare in modo di vedere lo stesso orario io che guardo la pagina dal mio computer locale ed un altra persona che visualizza la stessa pagina ad esempio che sta in svizzera?

Grazie!

E' molto importante perchè ho creato un sito di prenotazione online che ho venduto ad un cliente e hanno un regolamento restrittivo ( ad esempio la regola del circolo che mi rompe le scatole è quella che tutti i soci il venerdì mattina non possono prenotare prima delle 09.30.00, e possono prenotare dalle 09.30.01 in poi.

Cosa succede in pratica... se un socio modifica l'orario del suo computer locale mandando avanti l'orario, può prenotare prima degli altri e questo non deve succedere!

Avete da darmi un suggerimento... sto sbagliando qualche cosa nel mio codice?

Grazie ancora
308 messaggi dal 08 gennaio 2011
Ciao, dopo varie prove, (sto studiando javascript), ho capito che l'assegnazione che fai a currenttime, dato che è senza new, ritorna sempre l'ora corrente del client.

Se invece usi new, anche se usi il costruttore che accetta una stringa, devi fare attenzione che il formato sia mese/giorno/anno.
95 messaggi dal 04 settembre 2007
grazie per la risposta celere prima di tutto...

prima cosa ti posto il codice modificato del javascript...(lo vedi qui sotto:
<script type="text/javascript">
var timestampClient = new Date().getTime();
var timestampServer = <%= DateTime.UtcNow.Subtract(new Date(1970, 1, 1)).TotalMilliseconds.ToString("#") %>;
var scartoInMillisecondi = timestampServer-timestampClient;
var montharray=["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"];

function padlength(what){
var output=(what.toString().length==1)? "0"+what : what
return output
}

function displaytime(){
//qui ottengo sempre la data client corrente. Questa è sicuramente accurata.
var currenttime = new Date();

//la uso nella somma algebrica con lo scarto che avevo calcolato in precenza
currenttime.setTime(currenttime.getTime()+scartoInMillisecondi);
//il resto rimane uguale
var datestring=padlength(currenttime.getDate())+" "+montharray[currenttime.getMonth()]+" "+currenttime.getFullYear()
var timestring=padlength(currenttime.getHours())+":"+padlength(currenttime.getMinutes())+":"+padlength(currenttime.getSeconds())
document.getElementById("servertime").innerHTML= datestring+" "+timestring
}

window.onload=function(){
setInterval("displaytime()", 1000)
}
</script>




ma il problema rimane lo stesso...

L'orario mostrato inizialmente è quello del server ora (e questo obbiettivo lo raggiunto grazie a voi di Aspitalia), e quindi tutti inizialmente vedono l'orario del server sul quale si trova la mia pagina.

ma il problema ora è che se modifico l'orario o la data del mio computer locale vedo che mi si modifica l'orario inizialmente corretto in quanto ovviamente la funzione displaytime() esegue sempre la funzione (var currenttime = new Date();) che restituisce l'ora del mio computer locale perchè è sincronizzato con l'orario del mio server locale!.

Aiutatemi vi prego !

e' un casino questo!

Grazie di tutto per ora!
308 messaggi dal 08 gennaio 2011
Ciao, ti allego un po di codice che credo risolva il problema, nel senso che la pagina visualizza sempre la data proveniente dal server animata , (i secondi avanzano). Variare la data sul client non implica nulla.

Il codice usa uno script esterno e un pò di VB nel gestore del load, che passa la data, diciamo così, nel formato accettato da Date di javascript.

codice ASP

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="Experiment.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="DataServer" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
<script src="JScript1.js" type="text/javascript"></script>


Codice VB

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim ds As Date = Now
Dim s As String = ds.Month.ToString.PadLeft(2, "0") + _
"/" + ds.Day.ToString.PadLeft(2, "0") + _
"/" + ds.Year.ToString + " " + _
ds.Hour.ToString.PadLeft(2, "0") + ":" + _
ds.Minute.ToString.PadLeft(2, "0") + ":" + _
ds.Second.ToString.PadLeft(2, "0")

DataServer.Text = s
End Sub

Codice Javascript
var xs = document.getElementById("DataServer").innerHTML.toString();
var dataserver = new Date(xs);
var ds = "";
var Agg = setInterval(Aggiorna, 1000);
function Aggiorna() {
dataserver.setSeconds(dataserver.getSeconds() + 1);
ds = dataserver.getDate() + "/" + (dataserver.getMonth() + 1) + "/" + dataserver.getFullYear() + " " + dataserver.getHours() + ":" + dataserver.getMinutes() + ":" + dataserver.getSeconds()
document.getElementById("DataServer").innerHTML = ds;
}

Ciao.
95 messaggi dal 04 settembre 2007
Grazie del grosso aiuto. Ora vedo esattamente l'ora del server.

in fase di avvio vedo si l'ora del server ma chiedo un'ultima cosa che mi fa imbestialire...

Io nel mio programma utilizzo molto le date perchè ho creato un programma, che personalizzo all'utente come più gli piace,di prenotazione online che viene usato molto dai circoli di tennis dove gli utenti che ne usufruiscono possono prenotare le loro ore di gioco con il loro account personale, e tutto online.

la procedura asp.net quando leggo la data del server (uso la funzione) Date) mi legge la data del mio computer locale e quindi quando faccio un congfronto tra date , per vedere se l'utente può prenotare in quella fascia di orario, il confronto sballa,

Faccio un esempio:

Oggi è venerdi mattina , ore 09.30(ora segnalata dal mio computer locale).

il server segna che sono le ore 09.28.

quind il mio computer locale segna che sono avanti di 2 miunuti rispetto all'ora del server (ma questo ci può stare).

il programma permette di prenotare le ore di gioco della settimana prossima (che va da lunedì a domenica) dal giorno venerdi mattina della settimana attuale solo dopo le ore 09.30, mentre prima non si può fare, dal lunedì al giovedì non posso prenoare le ore di gioco della settimana successiva a quella attuale. (mostro un messaggio di errore).

Ora il problema è che:

L'utente vede nell'orario del suo computer locale(non del server) che può prenotare visto che sono le 09.30, quindi si logga nella sua area riservata e cerca di prenotare le sue ore...

Ora il programma dovrebbe bloccare l'inserimento della prenorazione e dare il messaggio di errore ma cosa succede.....

.....che quando tramite procedura di confronto lato server (quindi usando il date) verifico se l'utente sta prenotando nell'ora corretta ( e quindi verifico che l'ora del server dia come orario un'orario perlomeno uguale alle 09.30.00 o successivo l'utente riesce a prenotare lo stesso, perchè secondo me legge l'ora del computer locale e non quella del server (il Date mi legge l'ore del mio computer locale)

Come faccio ad ovviare a questo?


Grazie ! E' un dranmma tutto ciò!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.