anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 16 Jun, 2025 20:52

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr 28 Apr, 2006 09:44 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
Ich hoffe irgendwer hat sich einmal damit beschäftigt, seit Tagen suche ich php Foren ab und werde einfach nicht fündig -.-

und zwar geht es um folgendes..

Ich arbeite mit getgamedate und mein Dorfjahr ist im Moment im Jahre 1417. Durch das Kindertool von -DoM habe ich einen Wert $rowkin['gebdate'] welcher das Geburtsdatum des Kindes enthält. Als Beispielwert nehmen wir mal an, das Kind ist am 03.05.1416 geboren und "heute" ist der 02.02.1417


Wie kann ich es ermöglichen mir automatisch die Tagesdifferenz zwischen diesen beiden Daten zu berechnen, wenn es keinen gültigen Timestamp gibt im Jahre 1416 und 1417 -.-


mit Vardump und meinen Versuchen wirft er mir folgendes aus :


$this->bbcode_second_pass_code('', 'Debug:
string(10) "12.05.1417" string(10) "06.03.1416" string(11) "-13266 Tage" string(10) "12.05.1417" string(10) "18.05.1416" string(11) "-13266 Tage" string(10) "12.05.1417" string(10) "08.03.1416" string(11) "-13266 Tage"')


womit alle Kinder egal wann geboren -13266 Tage alt sind, was natürlich völlig falsch ist...

versucht hatte ich es so:

$this->bbcode_second_pass_code('', 'if($row[sex])
$sqlkin = "SELECT `name`,`gebdat` FROM kinder where mama = " . $row[acctid];
else
$sqlkin = "SELECT `name`,`gebdat` FROM kinder where papa = " . $row[acctid];

$resultkin = db_query($sqlkin);



$kinder = array();
while ($rowkin = db_fetch_assoc($resultkin)) {
/*by Rikkarda@silienta-logd.de*/
$heute=getgamedate();
$alter=round((strtotime("$heute")-strtotime($row[gebdat])) / 86400,0)." Tage";
if (substr($alter,0,2)=="1 ") $alter="1 Tag";
// round(($heute-$geb)*8).' Tage';
/*end Rikka*/


array_push($kinder, $rowkin[name],$alter); // ,$old2
var_dump($heute,$rowkin[gebdat],$alter);
}
')


Ich hoffe sehr, mir kann wer weiterhelfen, denn es ist an meine Grenzen gestossen, da auch andere Möglichkeiten im Netz nicht das erwünschte ergebnis gaben :/


ich hatte es auch hiermit versucht:



lg Rikka$this->bbcode_second_pass_code('', '
function alter($datum,$heute = FALSE){
#$datum = '14.03.1932';
$datum=$geb; //by Rikka $geb ist definiert mit dem $rowkin['gebdate']
$datum = explode('.',$datum);

if($heute === FALSE){
$heute = date('d.m.Y',time());
}
#$heute = '19.04.2006';
$heute = getgamedate(); //by Rikka
$heute = explode('.',$heute);

#Jahre ausrechnen
$alter = $heute[2] - $datum[2];

#Monate vergleichen
if($heute[1] < $datum[1]){
$alter--;
}

#Tage vergleichen
if($heute[1] == $datum[1]){
($heute[0] < $datum[0]) ? $alter-- : '';
}

#Ausgabe
return $alter;
}
')

nur warf er da überall 0 aus.. und ich mag ja eigentlich auch keine Jahre berechnen sondern Tage -.-







HILFE *grins*


lg Rikka

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 28 Apr, 2006 14:20 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Jahreszahlen in ein array einlesen, z.B:

[php]$array = array(
1417 => 2000
);[/php]

Dann Jahreszahl ersetzen, in timestamp unwandeln, fertisch :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 28 Apr, 2006 18:40 
Offline
Großmeister
Großmeister

Registriert: Mi 15 Dez, 2004 00:41
Beiträge: 467
Wohnort: München
Besser nicht, gibt nur Ärger mit Schaltjahren und so Kram. :P
Das ist halt der Nachteil, diese alten Daten sind nicht zum komfortablen Rechnen geeignet.

_________________
A bus station is where busses stop. A train station is where trains stop. On my desk there is a workstation...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 28 Apr, 2006 19:44 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
Chaosmaker hat geschrieben:
Besser nicht, gibt nur Ärger mit Schaltjahren und so Kram. :P
Das ist halt der Nachteil, diese alten Daten sind nicht zum komfortablen Rechnen geeignet.



ja so genau nehm ich es nu ja nicht.. es wäre halt nur schön gewesen, wenn ich eine Altersanzeige für die kinder hätte.. so wie halt der firstday in den accounts (die haben sich da schon was bei gedacht *gg*) naja soviele kinder sind es ja noch nicht in Silienta.. ich glaub ich mach es auch über diesen Umweg.. alles andere erscheint mir doch zu kompliziert.. ich hab auch ehrlich gesagt keine Lust ein 500 Zeichen array zu machen *seufz* wobei ich ja so gesehen kein Schaltjahr Problem hätte, wenn ich nur das Jahresdatum anpassen würde in ein Timestamp geeignetes.. oder? Dennoch ändert es nichts an der Tatsache, dass ich von 1400 - 1970 jedes Jahr im array bräuchte, und naja das ist mir dann zuviel des guten :/


aber falls noch wer ne kürzere Variante hat *gg* Ich würd mich freuen^^

lg

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 28 Apr, 2006 22:13 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 25 Aug, 2005 00:53
Beiträge: 135
LoGD: http://schwarzer-drache.cwsurf.de/logd/source.php
Ich hab hier eben aml was kleines gebastelt^^
Also nen Teil davon hat cih schon anders irgendwoe verwendet und den rest halt mal schenll hingeschrieben

Also im Syntax ist schonmal kein Fehler drinne...
aber obs funktioniert... KA^^;;;;
also ich abs getestet udnd a kam hinterher auh ne Zahl raus die auf den ersten BLick zumindest stimmen könnte^^

also beachten solltest du beim enbau, dass das Geburtsdatum des Kidnes im Format tt.m.jjjj unter $row['gebdat'] gespeichert ist...
Das Alter in Tagen sollte hinterher unter $age gespeichert sein^^

[php]
$dateary = array(
'bday' => $row['gebdat'],
'today' => getgamedate()
);

while (list($key,$val) = each($dateary)){
$date = array_combine(array('day','month','year'),explode('.',$val));
$days = $date['day'];
$i = $date['year'];
$l = ($i%4==0 && ($i%100!=0 || $i%400==0)); // Schaltjahr
$months = array(1=>31, $l?29:28, 31, 30, 31, 30, 31, 31 , 30, 31, 30);
for ($i=1; $i<$date['month']; $i++){
// $i = Monatszahl
$days += $months[$i];
}
for ($i=0; $i<$date['year']; $i++){
// $i = Jahreszahl
$l = ($i%4==0 && ($i%100!=0 || $i%400==0)); // Schaltjahr
$days += $l? 366 : 365;
}
$$key = $days;
}

$age = $today - $bday;
[/php]

Naja kannst es ja mal ausprobieren ich hoffe es klappt^^

----------

P.S.
Falls du eine php version <5 hast oder nich weißt welche version du hast,
dann haste die funktion array_cmobine warscheinlich nich^^.
dann soltlest du das hier in das script (oder in die common.php) einbauen..
(So ne selsbt gebastelte array_combine, die ich mal gemacht habm weil ich die öfters gebraucht hab^^)
[php]
if (!function_exists('array_combine')){
function array_combine ($keys, $values){
$error = 0;
if (!is_array($keys)) $error = 1;
elseif (!is_array($values)) $error = 2;
if ($error){
die("<b>Fatal Error:</b> Fehler bei Funktion \"array_combine\": Argument $error ist kein Array!");
}else if (count($keys)!=count($values) || count($keys)==0){
return false;
}else{
$array = array();
while (list($x,$key)=each($keys)){
list($y,$val)=each($values);
$array[$key] = $val;
}
return $array;
}
}
}
[/php]


Zuletzt geändert von Darkness am Sa 29 Apr, 2006 22:37, insgesamt 3-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 28 Apr, 2006 22:57 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
ui danke :)


werd ich mal ausprobieren und ich hab php 4^^

lg Rikka

_________________
~Inaktiv und Abwesend solange Mysql hier Moderatorenrechte hat~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 29 Apr, 2006 13:01 
Offline
Profi
Profi
Benutzeravatar

Registriert: Do 25 Aug, 2005 00:53
Beiträge: 135
LoGD: http://schwarzer-drache.cwsurf.de/logd/source.php
Achja, mir ist grad ein kleienr Fehler aufgefallen, hab ihn im beitrag oben schon verbessert...

[php]//Suche:
$months = array(1=>31, $l?29:28, 31, 30, 31, 30, 31, 31 , 30, 31, 30 ,31);
for ($i=1; $i<=$date['month']; $i++){

// Ersetze durch;
$months = array(1=>31, $l?29:28, 31, 30, 31, 30, 31, 31 , 30, 31, 30);
for ($i=1; $i<$date['month']; $i++){
[/php]

Das ist nur ein kleienr Fehler, der ein Änderung von maximal ein paar tagen verursacht^^,;
aber jetzt sollte er weg sein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 29 Apr, 2006 14:36 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 28 Aug, 2004 18:48
Beiträge: 1712
1. Feedback die Anzeige funktioniert :) zumindest wirft er mir schon einmal die richtige Tagezahl aus *freu*


nur schluckt er mir nun den Namen, aber da fummel ich mal weiter *gg*



2. Feedback: Ist Mutter von: Samirane, 426, Selene, 365, Samirana, 61

funzt einwandfrei *freu*
danke dir :)


lg Rikka


Falls also noch wer die Altersanzeige der Kinder in IG-Tagen hinter dem Namen in der bio haben möchte:

bio.php


oben einfügen die Function aus vorherigem Posting von Darkness



suche:

$this->bbcode_second_pass_code('', 'if($row[sex])
$sqlkin = "SELECT * FROM kinder where mama = " . $row[acctid];
else
$sqlkin = "SELECT * FROM kinder where papa = " . $row[acctid];

$resultkin = db_query($sqlkin);

$kinder = array();
while ($rowkin = db_fetch_assoc($resultkin))
{
array_push($kinder, $rowkin[name]);
}
}')


ersetze mit:

$this->bbcode_second_pass_code('', 'if($row[sex])
$sqlkin = "SELECT `name`,`gebdat` FROM kinder where mama = " . $row[acctid];
else
$sqlkin = "SELECT `name`,`gebdat` FROM kinder where papa = " . $row[acctid];

$resultkin = db_query($sqlkin);



$kinder = array();
while ($rowkin = db_fetch_assoc($resultkin)) {
/*Thx an Darkness eingebunden von Rikkarda@silienta-logd.de*/


$dateary = array(
'bday' => $rowkin['gebdat'],
'today' => getgamedate()
);

while (list($key,$val) = each($dateary)){
$date = array_combine(array('day','month','year'),explode('.',$val));
$days = $date['day'];
$i = $date['year'];
$l = ($i%4==0 && ($i%100!=0 || $i%400==0)); // Schaltjahr
$months = array(1=>31, $l?29:28, 31, 30, 31, 30, 31, 31 , 30, 31, 30);
for ($i=1; $i<$date['month']; $i++){
// $i = Monatszahl
$days += $months[$i];
}
for ($i=0; $i<$date['year']; $i++){
// $i = Jahreszahl
$l = ($i%4==0 && ($i%100!=0 || $i%400==0)); // Schaltjahr
$days += $l? 366 : 365;
}
$$key = $days;
}

$age = $today - $bday;
$age = ($age).' Tage' ;
/*end Rikka*/


array_push($kinder,$rowkin[name], $age);
//var_dump($rowkin[name],$today,$bday,$age);
}
')


natürlich die Hinweise von Darkness wegen der Feldformatierung beachten, ich braucht nichts ändern, es war im richtigen Format vordefiniert.


lg

_________________
~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  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum