berekening geboortedatum
Ik wil graag de geboortedatum berekenen uit 2 strings.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$Datum="27-10-2014";
$Leeftijd= "3 jr";
//creer datum van string
$datumbinnenkomst=strtotime($Datum);
//leeftijd zonder jr
$string= "-".substr($Leeftijd, 0, -2)."year";
//Bereken geboortedatum
$bday = strtotime($string, $datumbinnenkomst);
echo date("d-m-Y", $bday);
$Leeftijd= "3 jr";
//creer datum van string
$datumbinnenkomst=strtotime($Datum);
//leeftijd zonder jr
$string= "-".substr($Leeftijd, 0, -2)."year";
//Bereken geboortedatum
$bday = strtotime($string, $datumbinnenkomst);
echo date("d-m-Y", $bday);
Het werkt prima behalve als ik een getal gebruik met een komma erin, (dus als: $Leeftijd = "3.5 jr").
Kan iemand mij uitleggen waarom het dan niet werkt? Hoe kan ik dit oplossen?
Bij komma getallen zou je de fractie (het deel achter de komma) naar dagen om kunnen rekenen (0.5 * 365.25), en dan eerst de hele jaren er af trekken en vervolgens de rest in dagen.
mijn leeftijd was ooit 25 jaar maar dat is allang niet meer zo ...
Je zou dus beter met een geboortedatum kunnen werken want die blijft ongewijzigd. En op ieder moment kun je het verschil berekenen tussen 'nu' en een geboortedatum en dan weet je de leeftijd tot op de seconde af als het moet.
Je zou dit misschien op kunnen lossen door een reguliere expressie in te zetten die alle numerieke prut voor een spatie of ander "white space character" matcht en tevens een komma omzet naar een punt. Maar wat ik mij dan afvraag, wat heeft die datum dan voor betekenis? Is dit zoiets als "op <datum> was <persoon/huisdier> <X (en een half)> jaar oud"? Oftewel, eigenlijk heb je dan geen (of niet altijd een) precieze geboortedatum?
Als de invoer zo'n min of meer handgeschreven vorm heeft dan is de kans ook
Gewijzigd op 11/12/2017 00:28:00 door Thomas van den Heuvel
Thomas van den Heuvel op 11/12/2017 00:14:58:
Is dit zoiets als "op <datum> was <persoon/huisdier> <X (en een half)> jaar oud"? Oftewel, eigenlijk heb je dan geen (of niet altijd een) precieze geboortedatum?
Ja klopt, tis geschat dus niet heel precies en t kan in weken, maanden of jaren zijn, en de ene keer is het 6 weken en de andere keer staat er 1,5 maand.
Rob Doemaarwat: splitsen in dagen (mits afgerond) en jaren werkt, nu kan ik verder. Dank!
Ik heb eerlijk gezegd nog nooit iemand horen zeggen: "Ik ben x jaar en 33 weken oud".
Daarnaast ... als het geschat is (met alle respect) wat heb je er dan aan? Ah Pietje is ongeveer 30,27 jaar oud ... maar zeker weten doen we het niet.
Het lijkt me dus logischer, zoals hierboven al is geopperd, om altijd naar een geboortedatum te vragen in plaats van naar geschatte leeftijden. Dat laatste lijkt me weinig zinvol. Een geboortedatum geeft een exact antwoord.
Bij dieren, asieldieren bijvoorbeeld, kan ik me er wel wat bij voorstellen.
Je slaat de spijker op zijn kop, de dierenarts geeft een schatting en daar moeten we het mee doen:)
Marina janssen op 11/12/2017 22:39:48:
Je slaat de spijker op zijn kop, de dierenarts geeft een schatting en daar moeten we het mee doen:)
Maar dan kun je ook een geboortedatum schatten en die opslaan. Dan weet je na een paar jaar ook nog hoe oud het beestje [ongeveer] is
Daar ben ik nu mee bezig :)
Is het niet makkelijker om je formulier uit breiden. Dat je het aantal jaren, maanden en dagen selecteert uit een select menu ipv dat je rekening moet houden met allerlei invoeg methodes. Dan heb je geen last van typfouten en hoef je ook niets te controleren of te splitsen o.i.d.
Vergeet 31 februari niet ;)
Het grootste probleem dat ik tegenkom is met afronden. Stel dat een dier 1 jaar en 3 maanden is, dan wil ik dat er wordt weergegeven: 1 jaar. Dus afgerond. Maar ik wil wel door kunnen rekenen met die 1 jaar en 3 maanden. Iemand een tip?
En werk vervolgens dus met een standaard zonder dubbelzinnige / onnauwkeurige / onduidelijk interpretatie.
Gewijzigd op 14/12/2017 17:01:50 door Thomas van den Heuvel
Marina janssen op 14/12/2017 16:12:13:
Het grootste probleem dat ik tegenkom is met afronden. Stel dat een dier 1 jaar en 3 maanden is, dan wil ik dat er wordt weergegeven: 1 jaar. Dus afgerond. Maar ik wil wel door kunnen rekenen met die 1 jaar en 3 maanden. Iemand een tip?
Dat afronden doe je dan dus als je het getal gaat weergeven.
echo round($leeftijd, 0);
Thomas van den Heuvel op 14/12/2017 17:01:05:
Om hoeveel entries gaat het? ....Beetje praktisch blijven :).
Het werkt in principe goed nu, behalve voor de draaideurgevallen. Dat zijn er niet heel veel, maar tis wel een uitdaging om dat ook goed te krijgen. Ik ga er het weekend nog eens heel goed naar kijken, misschien kan ik met floor van FrankNB het probleem oplossen.
Zo ja dan zou ik er nog een kolom aan toevoegen welke enkel een waarde 0 of 1 bevat en die je verteld of het een schatting is of niet. Dit geeft leuke mogelijkheden bij de output:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// ...
$row = $mysqli_fetch_row($result);
$leeftijd = getAge($row['born']); // custom functie die je leeftijd in jaren en maanden teruggeeft
if($row['estimate']) { // als de geboortedatum een schatting is
echo 'Leeftijd is <strong>ongeveer</strong>' . $leeftijd;
} else {
echo 'Leeftijd is ' . $leeftijd;
}
?>
// ...
$row = $mysqli_fetch_row($result);
$leeftijd = getAge($row['born']); // custom functie die je leeftijd in jaren en maanden teruggeeft
if($row['estimate']) { // als de geboortedatum een schatting is
echo 'Leeftijd is <strong>ongeveer</strong>' . $leeftijd;
} else {
echo 'Leeftijd is ' . $leeftijd;
}
?>
Misschien leuk om even te laten weten of je iets aan de opmerkingen van mijzelf en Frank hebt gehad. Dan weten we tenminste dat we het niet helemaal voor niks doen.
Wordt vervolgd...(nb ik heb zeker wat aan jullie opmerkingen! Ik laat van me horen als ik eruit ben)
Blijf jezelf ook afvragen of je (ondertussen) niet het omslagpunt (al) hebt bereikt tussen broeden op een oplossing <--> een eenmalige handmatige aanpassing :p.