Serverzeitabfrage

gygra

Mitglied
Hallo,

es hakt bei einer Abfrage der Serverzeit. Ich hab mir aus mehreren Postings über Server und Uhren folgendes Script zusammengebastelt, das die Uhrzeit des Servers abfragen und als Uhr darstellen soll. Aber mit diesem Script kriege ich immer nur meine lokale Zeit.(habe ich zu Testzwecken um zwei Stunden verstellt.)

Code:
var now = new Date();
var lv = new LoadVars();
var iv = setInterval(this, "getTime", 50);

function getTime() {
	var mytime = new Date(now.valueOf());
	var hours = mytime.getHours();
	var minutes = mytime.getMinutes();
	var seconds = mytime.getSeconds();
	var milis = mytime.getMilliseconds();
	arrow_h._rotation = hours*360/12+minutes*12/60;
	arrow_m._rotation = minutes*360/60+seconds*6/60;
	arrow_s._rotation = seconds*360/60+milis*6/1000;
	display.text = fillZeros(hours)+":"+fillZeros(minutes)+":"+fillZeros(seconds);
}
function fillZeros(v) {
	if (v<10) {
		v = "0"+v;
	}
	return v;
}
lv.load("http://v-infonet.dyndns.org/_w3/utcdate.php");
lv.onLoad = function(getTime) {
};

Fehlt noch was? grübel
 
Wie gesagt, das ist aus anderen Scripten rauskopiert.
Ich habs aber mittlerweile zum Laufen gekriegt
Das Script sieht jetzt so aus:
Code:
var iv = setInterval(this, "getTime", 1000);
var loader:LoadVars = new LoadVars();
loader.onLoad = function(getTime) {
	
	
};

function getTime() {
	var loader:LoadVars = new LoadVars();
	loader.load('http://www.xyz.com/serverzeit.php');
	loader.onLoad = function(server) {
		
		arrow_h._rotation = this.h*360/12+this.m*12/60;
		arrow_m._rotation = this.m*360/60+this.s*6/60;
		arrow_s._rotation = this.s*360/60
		display.text = this.h+":"+this.m+":"+this.s;
	};
}

loader.load('http://www.xyz.com/serverzeit.php');

Aber jetzt stellt sich die Frage, ob es nicht auch geht, dass nicht dauernd die Serverzeit abgefragt wird, sondern flash die Serverzeit quasi als Startpunkt nimmt und dann einfach weiterläuft, sooo gravierend werden die Zeitabweichungen ja auch nicht sein.
Danke schon mal
 
Hi,

Du kannst die Differenz aus Server- und Clientzeit berechnen (Du kannst dafür einfach den Wert eines Date-Objektes (valueOf) vom anderen abziehen).

Erstelle nun eine Uhr auf Clientzeitbasis, addiere die zuvor ermittelte Differenz aber zum laufend erstellten Date-Objekt.

Gruß
.
 
Uuiuuiuuih, na da bau ich doch wieder 10 Mio Fehler rein, bervor ich das am Laufen habe.
Könnte man nicht "einfach" einen MC basteln, in dem die Zeiger rotieren beispielsweise durch eine Schleife, dann einmalig die Serverzeit abfragen und diesen Wert als Startpunkt nehmen?
@Tobias. By the way Schleife, ich hatte neulich unter dem Stichwort Schleife abbrechen was gepostet. Kannst du da mal kucken?
Danke
 
Hi,

so kompliziert ist das eigentlich gar nicht (abgesehen davon, dass wir beide fast das gleiche meinen ;) ).

Im Anhang findest Du ein Beispiel, welches anhand der einmal eingelesenen Serverzeit diese und die Clientzeit in Textfeldern ausgibt.

Gruß
.
 

Anhänge

Hi, mit folgendem Code:
Code:
var diff = 0;

var iv = 0;

var lv = new LoadVars();

lv.onLoad = function(s) {
	if (s && this.stamp != undefined) {
		var serverDate = new Date(parseInt(this.stamp, 10) * 1000);
		var clientDate = new Date();
		diff = serverDate.valueOf() - clientDate.valueOf();
		
	} else {
		diff = 0;
		trace("hallo");

	}
	go();
}

lv.load("http://www.XXX.de/flashzeit.php");

function go() {
	clearInterval(iv);
	iv = setInterval(this, "showTime", 1000);
}

function showTime() {
	var clientDate = new Date();
	var serverDate = new Date(clientDate.valueOf() + diff);
	
	zeigTime(digi, serverDate);
	
}
	

function zeigTime(digi, serverDate) {
	
		arrow_h._rotation = serverDate.getHours()*360/12+d.getMinutes()*12/60;
		arrow_m._rotation = serverDate.getMinutes()*360/60+d.getSeconds()*6/60;
		arrow_s._rotation = serverDate.getSeconds()*360/60
		time.text = fillZeros(serverDate.getHours())+":"+ fillZeros(serverDate.getMinutes())+":"+ fillZeros(serverDate.getSeconds());
		if (serverDate.getMonth()+1 <= 9) {datum.text = serverDate.getDate()+ "." + "0"+ (serverDate.getMonth()+1) + "."+ serverDate.getFullYear();}
	else{
		datum.text = serverDate.getDate()+"."+ (serverDate.getMonth()+1) + "." + serverDate.getFullYear();}
		function fillZeros(v) {
	if (v<10) {
		v = "0"+v;
	}
	return v;
		}





		}

läuft die Sache seit einiger Zeit problemlos.

Aber wo keine Probleme sind, werden halt welche gemacht. Das ganze soll jetzt auch noch auf einem Server laufen, der kein php unterstützt.
Daraufhin hab ich eine asp-Datei gebastelt, die mir den Unix-Timecode liefert. Das funktioniert auch. Nur wenn ich diese asp Datei anspreche krieg ich ein undefined.(deshalb das trace("hallo") im Script.) Liegt das jetzt am asp oder an Flash?

Der asp-Code sieht so aus:
Code:
<%
dim zeit, datum, tag, jahr
'stamp = Date()
zeit = Time()
'datum=Date()
'tag=day(datum)
'monat=month(datum)
'jahr=year(datum)


stamp = abs(DateDiff("s", Now(), "1/1/1970")) 

response.write(stamp)
%>
und liefert bei direkter Ansprache auf dem Server brav eine Zahlenschlange.

Oder kann man das unter asp nicht realisieren?
Ums nicht zu einfach zu machen: Auf einen php-tauglichen Server kann ich leider nicht umleiten, da die Seite ssl gesichert aufgerufen werden soll und die Zeitanfrage bei einem Fremdserver entweder den ssl-Status aufmacht, oder die Uhren nicht anzeigt, je nachdem, ob man die unsicheren Objekte anzeigen läßt oder nicht.
Danke
 
Hi,

kenne mich mit ASP nicht aus, aber das müsste so etwas sein:
Code:
response.write("stamp=" + stamp);

Das Script muss jedenfalls in etwa dieses ausgeben:
Code:
stamp=103240024

Gruß
.
 
Hurra, vielen Dank, und (Trommelwirbel) gerade hatte ich es auch selbst rausgekriegt. Mit
write("stamp=" & stamp) geht´s auch.
Damned - I´m good
 
Hallo,

kann man dem IE 6 und Vista verbieten, bei einer Aktualisierung auf den Browsercache zuzugreifen?

Im Moment steigen die Beiden immer wieder bei der ursprünglich abgefragten Zeit ein.

Nachtrag
write("stamp=" + stamp) t übrigens nicht. Es muss das "&" sein.
 
Zurück