anpera.net
https://anpera.dyndns.org/phpbb3/

Hilfe bei Zeitdifferenz mit daten VOR dem Timestamp gesucht
https://anpera.dyndns.org/phpbb3/viewtopic.php?f=34&t=2501
Seite 1 von 1

Autor:  Rikkarda [ Fr 28 Apr, 2006 09:44 ]
Betreff des Beitrags:  Hilfe bei Zeitdifferenz mit daten VOR dem Timestamp gesucht

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

Autor:  Eliwood [ Fr 28 Apr, 2006 14:20 ]
Betreff des Beitrags: 

Jahreszahlen in ein array einlesen, z.B:

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

Dann Jahreszahl ersetzen, in timestamp unwandeln, fertisch :)

Autor:  Chaosmaker [ Fr 28 Apr, 2006 18:40 ]
Betreff des Beitrags: 

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.

Autor:  Rikkarda [ Fr 28 Apr, 2006 19:44 ]
Betreff des Beitrags: 

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

Autor:  Darkness [ Fr 28 Apr, 2006 22:13 ]
Betreff des Beitrags: 

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]

Autor:  Rikkarda [ Fr 28 Apr, 2006 22:57 ]
Betreff des Beitrags: 

ui danke :)


werd ich mal ausprobieren und ich hab php 4^^

lg Rikka

Autor:  Darkness [ Sa 29 Apr, 2006 13:01 ]
Betreff des Beitrags: 

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.

Autor:  Rikkarda [ Sa 29 Apr, 2006 14:36 ]
Betreff des Beitrags: 

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

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/