PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eigenes Zeitsystem mit PHP?



Tha_Ira
24.05.2004, 17:32
Hallo erstmal an alle hier http://www.multimediaxis.de/images/smilies/old/s_065.gif

Ich hoffe, mir kann jemand helfen. Ich brauche ein Script für eine Homepage, mit dem man auf der Seite ein eigenes Zeitsystem mit Wochentag, Datum eventuell auch Uhrzeit anzeigen lassen kann. Das Problem dabei ist, dass es sich bei der Website um eine Fantasywelt mit eigenem Zeitsystem handelt( also zum Beispiel 10 statt 7 Wochentage usw.)Deswegen kann ich das nicht mit ner normalen Zeitanzeige lösen. Kann man ein derartiges Script mit PHP machen? Ich bin leider noch ziemlicher Anfänger in Sachen PHP :\

Chocwise
24.05.2004, 18:12
Sicherlich.
Die Frage ist nur wie dein Zeitsystem strukturiert ist.
Die Komplexität des Scripts hängt dann stark davon ab wie das Zeitsystem ausschaut.

Sollte das Zeitsystem nicht auf 24 h/Tag, 60 Einheiten je Minute/Stunde, homogene Tage/Monat (schlimmstenfalls noch mit Schaltjahren) basieren, ist einiges an mathematischen Formeln zu schreiben wozu ich zumindest wenig Lust habe. ;)

Das einfachste wäre ein Sekundensystem. :D Da bedarfs nur eines Timestamps und ggf. eine Subtraktion/Addition.

Tha_Ira
24.05.2004, 18:40
nun, an das mit den Sekundensystem hab ich auch gedacht, damit könnte man sich mit mehreren Variablen dann alle übrigen Werte für Tage und Monat ausrechnen und anzeigen lassen.
aber wie müsste der Scriptteil aussehen, der die Sekunden zählt, ich hab bisher nichts gefunden, was mir das wenigstens annähernd erklärt und dann weiß ich auch nicht, wo dieses Script dann eigentlich hinmuss, damit die Zeit tatsächlich immer weiterläuft und nicht nur, wenn man die Seite gerade geladen hat.

Chocwise
24.05.2004, 18:47
Original geschrieben von Tha_Ira
...
aber wie müsste der Scriptteil aussehen, der die Sekunden zählt, ich hab bisher nichts gefunden, was mir das wenigstens annähernd erklärt und dann weiß ich auch nicht, wo dieses Script dann eigentlich hinmuss, damit die Zeit tatsächlich immer weiterläuft und nicht nur, wenn man die Seite gerade geladen hat.
Achso, du willst eine Live-Uhr.
Nee, das geht nicht mit PHP. Das bekommst du nur mit JavaScript oder evtl. noch Flash hin.
Damit kenn ich mich nicht aus.

Tha_Ira
24.05.2004, 19:01
nein , sorry, hab mich etwas dumm ausgedrückt ^^
ich meinte nur, dass die Zeit bei jedem Laden der HP neu und aktuell berechnet und angezeigt wird.
Ich hab nur keine Vorstellung wie das gehn soll, dass, wenn man jetzt zB zwei Stunden nicht auf die Seite geguckt hat und dann neu läd, die zwei Stunden auch wirklich vergangen sind und das auch bei jedem Besucher der Seite gleich angezeigt wird.

dread
24.05.2004, 19:30
Ganz einfach, schau dir einfach die Funktionsreferenz zur date() Funktion (http://de3.php.net/manual/de/function.date.php) an.
Die Zeit wird vom Server abgegriffen und ist somit für jeden Besucher deiner Seite gleich.

Beispiel:


<?php
echo date("H:i:s"); // Gibt die aktuelle Serverzeit im Format 00:00:00 aus.
?>

Tha_Ira
24.05.2004, 19:44
ja, ok, so ein Script hatte ich bisher. Dort hatte ich mittels arrays nur die Namen der Wochentage und Monate geändert, aber die Anzahl konnte ich damit nicht ändern. Wie ich oben schon erwähnte, möchte ich aber ein eigenes Zeitsystem mit 10 Wochentagen und eventuell noch anderen Abweichungen. Muss ich also den Unix-Timestamp verwenden, um bei jedem Aufruf der Seite die vergangene Zeit zu berechnen und das dann irgendwie für mein Script auf Minuten, Stunden, Tage etc umrechnen? Oh Mann, ich hoffe, ich krieg das jemals hin. Im RPG Maker geht das aber viiiiiel einfacher :rolleyes: :p

wrtlprnft
24.05.2004, 20:59
<?php
/*
Hier ein Beispielcode.
Ich habe ihn nicht debuggt oder getestet [Edit: Doch, hab ich schon], aber er liefert zumindest die Uhrzeit.
Wer will kann noch Monate einbauen, das ist eben bloß ein Haufen Tipparbeit...
*/
$sekunden = microtime();
$sekunden = explode(" ",$sekunden);
$sekunden = $sekunden[1] + $sekunden[0]; //liefert die aktuelle Anzahl der Sekunden seit dem ersten Januar 1970.
$ausgegebene_sekunden = $sekunden % 60; //60 = Dauer einer Minute in Sekunden
$minuten = ($sekunden - $sekunden % 60) / 60; // = ganzzahlige Division
$ausgegebene_minuten = $minuten % 60; //60 = Dauer einer Stunde in Minuten
$stunden = ($minuten - ($minuten % 60)) / 60;
$ausgegebene_stunden = $stunden % 24; //24 = Dauer eines Tages in Stunden
$tage = ($stunden - ($stunden % 24)) / 24;
$ausgegebene_tage = $tage % 365; // 365 = Dauer eines Jahres
$jahre = (int)(($tage - $tage % 60) / 365 + 1970);

// soviel zu der reinen Zeit
// jetzt die Wochentage

$wtag = $tage % 7; // 7 = Dauer einer Woche in Tagen
if ($wtag == 4) //ich weiß grad nicht wie ein switch case geht, sonst könnte man das auch nehmen
$wtag_wort = "Montag";
else if ($wtag == 5)
$wtag_wort = "Dienstag";
else if ($wtag == 6)
$wtag_wort = "Mittwoch";
else if ($wtag == 0)
$wtag_wort = "Donnerstag";
else if ($wtag == 1)
$wtag_wort = "Freitag";
else if ($wtag == 2)
$wtag_wort = "Samstag";
else if ($wtag == 3)
$wtag_wort = "Sonntag";


// Noch die Stunden an die Zeitzone des Servers anpassen (auch ausprobieren)
$ausgegebene_stunden = ($ausgegebene_stunden + 2);
if ( $ausgegebene_stunden > 24)
$ausgegebene_stunden -= 24;

//und jetzt die Ausgabe
print ('Es ist ' . $wtag_wort . ', der ' . $ausgegebene_tage . '. Tag im Jahr ' . $jahre . '.<br>Zur Zeit dieses Seitenaufrufes war es ' . $ausgegebene_stunden . ':' . $ausgegebene_minuten . ' Uhr und ' . $ausgegebene_sekunden . ' Sekunden. Vielen Dank.');
?>
</p>

Edit: Weiß der Henker wieso der Backslash ('&#92;') nicht dargestellt wird...

Edit²: Ich habs getestet, jetzt müssten sämtliche Bugs draußen sein...
Als Seite hab ichs hier (http://mitglied.lycos.de/wrtlprnft/zeit.php) hochgeladen.

Chocwise
24.05.2004, 23:03
@ wrtlprnft: Respekt! Ich finds klasse welche Mühe du dir gibst. :):A
Ich wäre wohl zu beschäftigt/faul gewesen das fertigzuscripten, aber gut das es noch nette Leute wie dich mit zu viel Zeit und/oder Langeweile gibt. ;)

Tha_Ira
24.05.2004, 23:16
also dieses Script funktioniert bei mir nicht richtig. Als ich es zum Testen 1:1 kopiert hat es folgendes angezeigt:
Es ist Dienstag, der 152. Tag im Jahr 2004.356164408.
Zur Zeit dieses Seitenaufrufes war es :33 Uhr und 1085409232.7717 Sekunden. Vielen Dank.
das ist nicht so ganz das, was ich mir vorstelle, trotzdem danke für deine Mühe :)

mit meinem eigenen Scriptversuchen komme ich aber auch nicht weiter. :\
Ich hab zunächst für Sekunden, Minuten, Stunden etc. jeweils eine Variable mit einem Ausgangswert angelegt. Dann hab ich mithilfe von $timestamp = time();und einer while Schleife die Sekunden ermittelt, die seit dieser festgelegten Zeit vergangen sind.
Soweit hats auch funktioniert. Ich wollte dann mit weiteren Schleifen die Minuten ausrechnen lassen, in dem ich einfach prüfen lasse, ob die Sekunden den Wert 60 überschreitet bzw gleich ist. In dem Falle soll sich die Variable für Minuten um eins erhöhen und die variable Sekunde um 60 vermindern.
while($sekunde >= 60)
{
$minute ++;
$sekunde - 60;
}


Aber ich komme an dieser Stelle nicht weiter. Obwohl mir alles logisch erscheint und ich auch schreibmäßig keinen Fehler erkennen kann, wird diese zweite Schleife einfach ignoriert. Es kommt keine Fehlermeldung aber es wird auch nichts angezeigt, wenn ich ich den Wert $minute anzeigen lassen will.
Wahrscheinlich ist das alles kompletter Müll http://www.multimediaxis.de/images/smilies/old/s_046.gif :'(


EDIT: hab jetzt grad erst gesehen, dass du das Sript noch verändert hast. Jetzt zeigt es das richtig an :) Und da kann man jetzt auch statt 7 Wochentagen in 10 umändern und die eigenen Tages- und Monatsbezeichnungen eingeben? Muss ich nachher gleich probieren. Jetzt muss ich leider erstmal weg, aber vielen Dank schonmal. Das ist wirklich ganz doll nett, dass sich jemand soviel Mühe macht http://www.multimediaxis.de/images/smilies/old/sm_12.gif

Zack
25.05.2004, 00:14
hm ich bin keine php experte. hier mal ein link von einem fehler den ich damals hatte. der dürfte dir eigentlich schon weiterhelfen!
http://forum.rpg-ring.com/forum/showthread.php?s=&threadid=25199

--
zack

wrtlprnft
25.05.2004, 01:51
Original geschrieben von Chocwise
@ wrtlprnft: Respekt! Ich finds klasse welche Mühe du dir gibst. :):A
Ich wäre wohl zu beschäftigt/faul gewesen das fertigzuscripten, aber gut das es noch nette Leute wie dich mit zu viel Zeit und/oder Langeweile gibt. ;) Wohl eher Langeweile...

Hier (http://mitglied.lycos.de/wrtlprnft/zeit.txt) hab ich die Datei mal als .txt hochgeladen, nimm die, wenn das gepostete nicht funzt.

Edit:
<?php
while($sekunde >= 60)
{
$minute ++;
$sekunde -= 60; //$sekunde - 60; bewirkt gar nix. er rechnet das dann aus und vergisst es gleich wieder...
}
?>Ist equivalent zu
<?php
$minute = (int)($sekunde / 60);
$sekunde %= 60;
?>Der Code wird auch viel schneller ausgeführt...

Der von dir gepostete Code ist eine Endlosschleife.

Das mit den 10 Wochentagen geht natürlich:D:
<?php
$wtag = $tage % 10; // Vorsicht! 10 statt 7!
if ($wtag == 1)
$wtag_wort = "Montag";
else if ($wtag == 2)
$wtag_wort = "Dienstag";
else if ($wtag == 3)
$wtag_wort = "Mittwoch";
else if ($wtag == 4)
$wtag_wort = "Donnerstag";
else if ($wtag == 5)
$wtag_wort = "Freitag";
else if ($wtag == 6)
$wtag_wort = "Samstag";
else if ($wtag == 7)
$wtag_wort = "Sonntag";
else if ($wtag == 8)
$wtag_wort = "Montag nächster Woche";
else if ($wtag == 9)
$wtag_wort = "Dienstag nächster Woche";
else if ($wtag == 0)
$wtag_wort = "Mittwoch nächster Woche";
?>Dafür hab ich das ja auch geschrieben...

wrtlprnft
25.05.2004, 02:40
Sorry für den Doppelpost, aber ich hab jetzt auch die Monate eingefügt.

Hier (http://mitglied.lycos.de/wrtlprnft/zeit.php) kann man sich das Ganze anschauen und hier (http://mitglied.lycos.de/wrtlprnft/zeit.txt) ist der Quelltext.
Falls in deinem Spiel auch Schaltjahre vorkommen solltest du die Änderungen übernehmen, da das alte Script die Tage verwurstelt hat. Ist aber jetzt gefixt.

Tha_Ira
25.05.2004, 21:27
Klasse, hab das Script jetzt eingebaut und meine eigenen Monats- und Tagesbezeicnungen eingefügt. :A

Ich finde es wirklich unglaublich nett, dass jemand soviel Mühe und Zeit opfert, um mir zu helfen. Also vielen Dank nochmals :) :) :)

wrtlprnft
25.05.2004, 21:30
Kann man dann auch sehen, wo dus eingebaut hast:D? Mich interessieren nämlich die Tagesbezeichnungen usw.

Sonst: gern geschehen:D

Tha_Ira
25.05.2004, 22:05
momentan ist die HP noch nicht online da ich erst noch ein paar Seiten dafür machen muss(damit man wenigstens schonmal weiß, worums eigentlich geht, bin ja noch ziemlich am Anfang), die wird dann aber in meinem Profil zu finden sein, wenns soweit ist :)