| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

03-10-2009, 23:09
|
|
Meilenwald
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 3
|
|
Rechenfehler in if-funktion
Hallo. Ich möchte ein kleines Script zur Altersberechnung schreiben, die Werte habe ich soweit nun alle und komme zur genaueren Bestimmung, sprich geb.Jahr wurde von heutjahr abgezogen und möchte nun ggf. ein -1 haben für den Fall dass der geburtsmonat "größer" oder gleich dem aktuellen ist UND nochmal geprüft wird, ob bei gleichem Monat der Geburtstag kleiner ist als der aktuelle um dann wieder 1 Jahr draufzusetzen was ich vorher wegen des gleichen monats abgezogen habe, ihr versteht es vielleicht besser wenn ich mein Code mal zeige:
PHP-Code:
if ($mm >= $heutemm) { $alter = $alter - 1; if ($mm == $heutemm && $dd < $ddheute) { $alter = $alter + 1; } }
echo $alter;
Ich nehme an dass ich entweder ein Logik oder Syntax Problem habe, komme aber alleine nicht so recht drauf warum er mir das nicht korrekt ausrechnet.
Hoffe aus Hilfe
Gruß
|

03-10-2009, 23:19
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
PHP-Code:
$geburtstag = "1981-10-04";
$alter = substr(date("Ymd") - date("Ymd", strtotime($geburtstag)), 0, -4);
|

03-10-2009, 23:22
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Es gibt keine if Funktionen...
PHP-Code:
function wie_alt($geburtsdatum,$heute='')
{
list($ht,$hm,$hj) = explode('.',empty($heute)?date('d.m.Y'):$heute) ;
list($gt,$gm,$gj) = explode('.',$geburtsdatum) ;
return (($hm<$gm)||(($hm==$gm)&&($ht<$gt)))?$hj-$gj-1:$hj-$gj;
}
$geburtsdatum = '23.11.1936';
echo wie_alt($geburtsdatum);
|

03-10-2009, 23:35
|
|
Meilenwald
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 3
|
|
Hallo und Danke für die Alternativvorschläge! Ich verwerfe meine eigene Idee sehr ungern - gibt es denn an meinem Code oben etwas auszusetzen bzw. ist dein Vorschlag, verzeih mein Fehler im Topic (es geht mir nicht darum, es in eine Funktion zu schreiben sondern ich hatte fälschlicherwiese angenommen man nennt meinen Kram oben so), denn so nicht umsetzbar? Ich habe es im Grunde wie du gemacht, nur dass ich statt explode den string in Einzelzeichen zersetzt und dann in 2er-packen in eine Variable gepackt hab ohne die Punkte (das script dient einzig zu lern und experimentier zwecken) mitzunehmen.
Falls man das so mit if nicht regeln kann, würde mir eine schlichte Aussage reichen - Alternativvorschläge habe ich ja, dankbar, bereits angenommen.
Gruß
|

03-10-2009, 23:38
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Zitat:
Zitat von Meilenwald
Ich verwerfe meine eigene Idee sehr ungern
|
Dann betreibe Debugging - Kontrollausgabe, welche Variablen zu welchem Zeitpunkt welche Inhalte haben.
Zitat:
|
Falls man das so mit if nicht regeln kann
|
combies Vorschlag verwendet genauso Bedingungen und Abfragen - nur in "kondensierterer" Form, in dem er den tenären Operator verwendet. Und der funktioniert ähnlich(!) wie ein if.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

03-10-2009, 23:39
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von Meilenwald
Hallo und Danke für die Alternativvorschläge! Ich verwerfe meine eigene Idee sehr ungern
|
PHP-Code:
if ($mm > $heutemm || ($mm == $heutemm && $dd > $ddheute))
{
$alter = $alter - 1;
}
|

03-10-2009, 23:40
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
In meinem Vorschlag steckt auch ein kleines, fast unsichtbares, IF im ?:; versteckt.
Der Vorschlag von h3ll hat den Nachteil, dass er auf manchen Systemen vor 1970 falsche Ergebnisse liefern kann.
|

03-10-2009, 23:47
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von combie
Der Vorschlag von h3ll hat den Nachteil, dass er auf manchen Systemen vor 1970 falsche Ergebnisse liefern kann.
|
PHP-Code:
$geburtstag = "1980-05-09";
$alter = substr(date("Ymd") - vsprintf("%04u%02u%02u", sscanf($geburtstag, "%u-%u-%u")), 0, -4);
Zufrieden?
|

03-10-2009, 23:53
|
|
Meilenwald
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 3
|
|
Vielen Dank euch beiden! So passt es
Schönen Abend noch,
Meilenwald
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|