anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 28 Mär, 2024 10:12

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Deine Meinung zur Funktion
Ich finde sie genial. 8%  8%  [ 1 ]
Ich finde sie sehr gut. 17%  17%  [ 2 ]
Ich finde sie gut. 0%  0%  [ 0 ]
Ich finde sie recht okay. 0%  0%  [ 0 ]
Ich finde sie okay. 8%  8%  [ 1 ]
Ich finde sie nicht so toll. 0%  0%  [ 0 ]
Ich finde sie nicht so praktisch. 17%  17%  [ 2 ]
Ich finde sie eher schlecht. 8%  8%  [ 1 ]
Ich finde sie schlecht. 0%  0%  [ 0 ]
Ich finde sie sehr schlecht. 42%  42%  [ 5 ]
Abstimmungen insgesamt : 12
Autor Nachricht
 Betreff des Beitrags: Wochentage und Monate in LotGD
BeitragVerfasst: Mi 28 Okt, 2009 22:07 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Hay,

da ich nun 'endlich' wieder etwas Zeit für die Programmierung eines LotGD's gefunden habe,möchte ich doch einfach mal mein 'neustes' Spielzeug veröffentlichen.

Gewiss , werden nun einige, wie vielleicht Eliwood sagen: Das hätte man aber besser lösen können.
Ich habe lange nichts mehr in Sachen php etc. pp. gemacht und das 'Tool' funktioniert einwandfrei! Ohne Fehler ohne alles. Demnach ist es okay so.

Also, was ist es?
Wie viele ja von uns wissen, gibt es in LotGD natürlich auch das aktuelle Datum. Das ist auch totalokay. Nur finde, bzw. fand ich, dass man dann auch Wochentage haben sollte. ;) Also habe ich eine Funktion geschrieben, die den aktuellen Wochentag ermittelt. Angefangen wird Montag, dem 01.01.0000. Danach wird systemmatisch ein neuer Wochentag in der Datenbank abgespeichert und kann abgerufen werden. (Gespeichert in der setnewday.php)

Das meiste Kopfzerbreichen hat mir folgendes bereitet:

So Joel, nun hast Du jedem Tag im Jahr einen Wochentag zugeteilt. Das Jahr endet mit Montag, dem 31.12.XXXX. Aber dann hat der darauffolgende Tag, also der 01.01.XXXX auch wieder Montag als Wochentag. Warum? Weil der Server ja nicht wissen kann, dass der vorige Tag ein Montag war. ;)

-editiert- .Du musst mittels des Jahres errechnen wieviele Tage (Ingame-Tage) es schon gab.

Also hab ich mich dran gesetzt und habe dank der Funktion substr(), dass aktuelle Jahr ausgefiltert und * 365 genommen. Und so wusste ich wieviele Tage es dann gab. Ääääh, ne.. Doch nicht so ganz. Wir können zwar das Jahr '12' haben, allerdings.. wenn wir dann Beisp. den 12.04.0012 haben, sagt mir die Variable nur, dass es bereits 4380 Tage gab. (Ingame) Aber dies würde ja dann nur auf den 31.12.0011 zutreffen. Also musste ich hier nun noch ein bisschen rumrechnen lassen &' hatte dann letztendlich die Lösung. :) Egal, nun gehts aufjedenfall weiter.

Es gibt 'leider' keine Schaltjahre! Nur normale 365 Tage's Jahre.

Dazu kommt noch etwas:

01.01.0000

Genau, hier habe ich den Monat dick geschrieben. Wenn man schon einen Wochentag im Spiel hat, so finde ich, sollte es auch den dazugehörigen Monat geben. Dieser wird in einer eigenen Funktion ermittelt. (Dieser wird nicht in der Datenbank gespeichert, daher es ja nur 12 Monate gibt.) Die Funktion stelle ich hier nun auch zur Verfügung. :)

Beisp. um den aktuellen Spieltag anzuzeigen:

$this->bbcode_second_pass_code('', 'getsetting('DAY');')
So wird der aktuelle Wochentag angezeigt, daher er in der 'setting' Tabelle gespeichert wird.

Änderugen in der setnewday.php:

Suche:
$this->bbcode_second_pass_code('', ' $date = sprintf('%04d-%02d-%02d',$date[0],$date[1],$date[2]);
savesetting('gamedate',$date);
}')

Füge danach ein:
$this->bbcode_second_pass_code('', 'setDay();')

Function setDay():

$this->bbcode_second_pass_code('', 'function setDay($full_day = TRUE) {

$explode_informations = explode('.', getgamedate());

if ($full_day == TRUE) {

$day_arr = array('Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag');

}
elseif ($full_day == FALSE) {

$day_arr = array('Mo.','Di.','Mi.','Do.','Fr.','Sa.','So.');

}

$month_arr = array('1' => 31,'2' => 28,'3' => 31,'4' => 30,'5' => 31,'6' => 30,'7' => 31,'8' => 31,'9' => 30,'10' => 31,'11' => 30,'12' => 31);
$day = $month_arr[$explode_informations[1]]-$explode_informations[0];
$number = 0;

for ($x = 0;$x < $explode_informations[1];$x++) {

$counter++;
$number += $month_arr[$counter];

}

$number -= $day;

if ($explode_informations[2] != '0000') {

if (substr($explode_informations[2], 0, 3) == '000') {

$year = substr($explode_informations[2], -1);

}
elseif (substr($explode_informations[2], 0, 2) == '00') {

$year = substr($explode_informations[2], -2);

}
elseif (substr($explode_informations[2], 0, 1) == '0') {

$year = substr($explode_informations[2], -3);

}
else {

$year = $explode_informations[2];

}

$days = $year*365;
$days += $number;

}
elseif ($explode_informations[2] == '0000') {

$days = $number;

}

$arr = array();

for ($x = 0;$x < $days;$x++) {

$count++;
$dcount++;

if ($dcount == 8) {

$dcount=0;
$dcount++;

}

$arr[$count] = $day_arr[$dcount-1];

}

$day = $arr[$days];
savesetting('DAY', $day);

}')

Beisp. zur Verwendung der Funktion 'getMonth():

$this->bbcode_second_pass_code('', 'getMonth();
Ausgabe:
Januar (Wenn Monat '1' / '01')

getMonth(FALSE);
Ausgabe:
Jan (Wenn Monat '1' / '01')')

Funktion getMonth():

$this->bbcode_second_pass_code('', 'function getMonth($month_full = TRUE) {

$explode_informations = explode('.', getgamedate());

if ($month_full == TRUE) {

$month_arr = array('1' => 'Januar','2' => 'Februar','3' => 'März','4' => 'April','5' => 'Mai','6' => 'Juni','7' => 'Juli','8' => 'August','9' => 'September','10' => 'Oktober','11' => 'Novermber','12' => 'Dezermber');

}
else if ($month_full == FALSE) {

$month_arr = array('1' => 'Jan.','2' => 'Feb.','3' => 'Mär.','4' => 'Apr.','5' => 'Mai','6' => 'Jun.','7' => 'Jul.','8' => 'Aug.','9' => 'Sep.','10' => 'Okt.','11' => 'Nov.','12' => 'Dez.');

}

return $month_arr[$explode_informations[1]];

}')

Lg,
MySQL.

P.S.:Feedback gerne gesehen.

_________________
Never change a running system. Bullshit! ;)


Zuletzt geändert von MySql am Fr 22 Jan, 2010 04:15, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 00:44 
Offline
Profi
Profi
Benutzeravatar

Registriert: Mi 13 Mai, 2009 11:01
Beiträge: 147
Geschlecht: Weiblich
LoGD: http://www.lunaria-logd.de/source.php
Skype: Fragen
ohje so viel mathe um diese Zeit noch XDD
sieht doch ganz nett aus oo
aber ich bin ja sowieso der blindfisch und überseh sicher was^^°

einbauen werd ichs erstmal aber nicht, aber die idee find ich klasse, hoffe das welche gebrauch von machen^^

mfg Lun

_________________
♠ PikAss

Fehler sind menschlich, und Menschen sind fehlerhaft!
Meiner einer, ist keiner, aber wenn keiner einer ist, wer ist dann keiner? :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 15:55 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Ja, das hätte man in der Tat besser lösen können. Wenn man nämlich eine Ahnung hat, dass die Wochentagsberechnung mathematisch erfolgen kann und dann auf die Idee kommt, Wochentag in der Wikipedia nachzuschlagen, dann findet man innert kürzester Zeit die Zeller-Kongruenz, mit der man die Wochentage errechnen kann.
Die einzige Schwierigkeit an der Formel ist dann zu wissen, was die Gaussklammern bedeuten - hat man das aber dann nachgeschaut, muss man sich nur noch für einen der beiden Kalender entscheiden. Das führt dann zu einer kurzen und würzigen Funktion.

$this->bbcode_second_pass_code('', 'function gametime_getweekday($year, $month, $day, $jul = false) {
/** Calculation of the week's day with Zeller’s method
* 1 means Sunday, 6 means friday. 0 is the Saturday.
* Implementation 2009 by Basilius "Wasili" Sauter. Public Domain.
*/

// January is the 13th month of the year before.
// February is the 14th month of the same year.
if($month <= 2) {
$month+=12;
$year--;
}

// Get the centurynumber (No, 2009 is here the 20th century.)
$centurynumber = floor($year/100);
// Get the last two digits of the year (09 for 2009, 89 for 1989...)
$yeardigits = $year - $centurynumber*100;

// Use gregorian calendar if $jul is false (default)
if($jul === false) {
return ($day + floor(($month+1)*26/10) + $yeardigits + floor($yeardigits/4) + floor($centurynumber/4) + 5*$centurynumber) % 7;
}
// Use the julian calendar if $jul is true
else {
return ($day + floor(($month+1)*26/10) + $yeardigits + floor($yeardigits/4) + 5 + 6*$centurynumber) % 7;
}
}')


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 17:30 
Offline
Freak
Freak
Benutzeravatar

Registriert: Di 01 Mai, 2007 13:57
Beiträge: 1634
Wohnort: Dortmund.
Geschlecht: Männlich
LoGD: Lokal.
Skype: josh.hoiul
Das Sonntag der erste Tag der Woche ist, brauch mir Wikipedia nicht zu sagen. Das weiss ich auch so. ;)
Allerdings wissen dies die meisten Menschen nicht, daher für sie die neue Woche erst am Montag anfägt. (Ende des Wochenendes)

Wie gesagt, ich habe lange nichts mehr in Sachen PHP etc. gemacht und die Funktion macht genau das, was sie tun soll. ;)

Ach und verrate uns doch mal bitte, wie man deine Funktion in LotGD einbinden soll. Bzw. sie nutzen.. Ich glaube nicht das ein Laie das hinbekommt.

Lg,
der Joel.

_________________
Never change a running system. Bullshit! ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 17:50 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
a) Gehört die Angabe, welche Zahl welchen Wochentag meint, zur Dokumentation der Funktion - ohne die kann man nicht wissen, was das zurückgegebene Resultat bedeutet. Übrigens könnte es auch anders sein (und ist es hier auch!), die Formel achtet nicht auf Konventionen sondern gibt einfach etwas zurück (Und zwar beginnt in der Formel die Woche mit dem Samstag!). Was aber die Wikipedia genau damit zu tun hat, weiss ich nicht - der Link zur Wikipedia war als Quellenangabe für die Berechnung der Wochentage gedacht, nicht als Ort, wo man die Reihenfolge der Wochentage erfahren kann?

b) War die Funktion eher an dich als OP gerichtet als mathematische Vereinfachung deiner überflüssigen Stringoperationen als Anregung, wie man es sonst hätte lösen können. Gäbe übrigens auch noch andere Verfahren dafür, auch weniger mathematische. Auch versteh ich nicht, was PHP damit zu tun hat - das kann jeder bessere Taschenrechner ausrechnen. Sogar noch einfacher als es mit PHP geht. Deshalb entfällt im Prinzip auch gleich c), weil die Funktion garantiert nicht an Laien gerichtet ist. Trotzdem will ich mal nicht so sein:

c) Man gibt in der Funktion die Parameter Jahr, Monat und Tag in genau dieser Reihenfolge an und bekommt den dazu passenden Wochentag als Zahl zurück, wobei die Woche beim Samstag (=0) beginnt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 18:52 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
MySql hat geschrieben:

P.S.:Feedback gerne gesehen.


MySql hat geschrieben:

Wie gesagt, ich habe lange nichts mehr in Sachen PHP etc. gemacht und die Funktion macht genau das, was sie tun soll. ;)



wieso erbittest du Feedback, wenn Du es doch nicht haben willst? :dumm:

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 20:03 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Ich finde den Anfang und ein teil der "Zwischensätze" ganz amüsant. Denn es sind teilweise unnütze Kommentare dabei, die NIEMANDEN interessieren. Denn schön zu reden macht auch wenig Sinn.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 22:23 
Offline
Profi
Profi

Registriert: Mo 12 Jul, 2004 21:48
Beiträge: 141
Mir persönlich gefällt diese ganze Geschichte mit den Tagen in LoGD eh nicht.

Bin grad dabei die Checkday abzuändern und das jeder Spieler nurnoch eine Mail bekommt.
Der Kalender wurde an uns (RL) dementsprechend angepasst (nur mit abgewandelten Monatsnamen).

Ist halt eine Geschmacksfrage, trotzdem hätte man die Funktion einfacher gestalten können.

Übrigens Hi Kevz ;)

Was macht denn nun dein PvP-Projekt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 22:56 
Offline
Profi
Profi

Registriert: Mo 30 Okt, 2006 21:29
Beiträge: 195
*mal das hier reinschieb*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: Do 29 Okt, 2009 22:59 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Welv hat geschrieben:
*mal das hier reinschieb*


Hat relativ wenig mit der Bestimmung des Wochentags zu tun?

@MySQL: Achja, die Monatsnamen kann PHP sogar von Haus aus. Einfach die locales auf Deutsch stellen mit setlocale() und, sofern installiert, sind die Monatsnamen Deutschsprachig.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: So 01 Nov, 2009 20:43 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 16 Jul, 2005 22:40
Beiträge: 693
Wohnort: /var/server/home/castle
Geschlecht: Männlich
LoGD: http://www.kokoto.de/
Skype: Apfelschokowodkakekskuchen
$this->bbcode_second_pass_code('', ''11' => 'Novermber','12' => 'Dezermber'')


Ich verewige mich nur im dm thread hier, um zu sagen das auf allen kalendern hier in der Umgebung irgendwie November und Dezember stehen... weis ja nicht wie das bei mysql so ist...


:P :P :P

(spam) Was soll das bringen? kann man ja gleich aktuelles datum nehmen und irgendwie in der zeit zurück rechnen, und dann hat man auch mit der normalen funktion date ein hübsches datum mit wochentagen (oder nicht?) also so würde ich das machen wenn ich mir das einbauen wollen würde ^^ (/spam)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wochentage und Monate in LotGD
BeitragVerfasst: So 01 Nov, 2009 23:05 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
Tidus hat geschrieben:
[code]

(spam) Was soll das bringen? kann man ja gleich aktuelles datum nehmen und irgendwie in der zeit zurück rechnen, und dann hat man auch mit der normalen funktion date ein hübsches datum mit wochentagen (oder nicht?) also so würde ich das machen wenn ich mir das einbauen wollen würde ^^ (/spam)


so in etwa hab ich das auch gelöst :P und nen schickes array um aus den englischen MOnaten deutsche zu machen ;)

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum