Något åt det här hållet borde funka, inte testat.
Men då måste du spara personnummret med seklet inräknat, typ 1980.
SELECT (LEFT(CURDATE(),4)-LEFT(birth,4)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age FROM table
14 svar · 3 565 visningar · startad av bassebhu
Hej alla glada!
Jag sökte och hittade en del ämnen om detta, men bara i SQL-form.
Jag undrar hur man räknar ut hur gammal en person är om man har dennes födelsedata i den här formen: 800101
Att bara använda 80 för att räkna ut att snubben är 26 år är inte tillräckligt. Jag vill att den ska slå om precis på födelsedagen.
Tackar för svar!
Något åt det här hållet borde funka, inte testat.
Men då måste du spara personnummret med seklet inräknat, typ 1980.
SELECT (LEFT(CURDATE(),4)-LEFT(birth,4)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age FROM table
Du har ju hela veckan på dig. Det är ju inte förrän den femtonde!
Jo, fast jag ville ju inte ha som en SQL-fråga. Jag vill ha en php-funktion som man kör på ett recset innehållandes 6 siffror: 800101.
Lappe skrev:
Du har ju hela veckan på dig. Det är ju inte förrän den femtonde!
?
;) > bassebhu Kolla profilen för vänstertecknad ;)
På skoj :e
bassebhu skrev:
Hej alla glada!
Jag sökte och hittade en del ämnen om detta, men bara i SQL-form.
Jag undrar hur man räknar ut hur gammal en person är om man har dennes födelsedata i den här formen: 800101Att bara använda 80 för att räkna ut att snubben är 26 år är inte tillräckligt. Jag vill att den ska slå om precis på födelsedagen.
Tackar för svar!
Räknar visserligen inte ut åldern från 820729, eftersom vi inte vet om de är födda på 2000-talet eller 1900-talet!
<?php
$alder = "19820729";
echo get_age($alder);
function get_age($thedate) {
$age = floor((date("Ymd")-intval($thedate))/10000);
if($age < 0) {
return FALSE;
} else {
return $age;
}
return FALSE;
}
?>
Missade visst att det inte var SQLform du var ute efter. :)
function getage($b) {
return date("Y") - ($b{0}.$b{1}.$b{2}.$b{3}) - (date("m") < ($b{5}.$b{6}) || (date("m") == ($b{5}.$b{6}) && date("d") < ($b{8}.$b{9})));
}
Titta på kommentarerna på denna sida för hur man kan räkna ut det: http://se.php.net/manual/en/function.getdate.php
Så länge personen inte är 100+ så kan man väl göra såhär:
<?
function get_age($date)
{
$age = floor((date('ymd') - $date)/10000);
if(($age) < 0)
$age = 100 + $age;
return $age;
}
print "Du är ".get_age('800101')." år.";
?>
Melea skrev:
Missade visst att det inte var SQLform du var ute efter. :)
function getage($b) { return date("Y") - ($b{0}.$b{1}.$b{2}.$b{3}) - (date("m") < ($b{5}.$b{6}) || (date("m") == ($b{5}.$b{6}) && date("d") < ($b{8}.$b{9}))); }
Funkade inte, såvida jag inte gjorde fel, om det nu är möjligt att göra fel på det.
Fiolgnidarens lösning funkade hur som helst! Tack :)
bassebhu skrev:
Fiolgnidarens...
"Fåret glädja oss även efter dess död genom den ljuvliga klangen från dess tarmar."
fiddler skrev:
"Fåret glädja oss även efter dess död genom den ljuvliga klangen från dess tarmar."
Fast jag är mer förtjust i fårfioler än sensträngar :e
Det bör funka om du har 19 eller 20 innan. :)
Annars kan du ju göra såhär
function getage($b) {
return date("Y") - ('19'.$b{0}.$b{1}) - (date("m") < ($b{2}.$b{3}) || (date("m") == ($b{2}.$b{3}) && date("d") < ($b{4}.$b{5})));
}
echo 'Du är '.getage('850215').' år gammal.';
Men fiddlers variant är att föredra. :)
Jag har en databas med medlemmar där personnumret sparas i följande form:
YYMMDDNNNN
Sen använder jag det här för att kolla om personen är yngre än 18 år:
$birthstamp = mktime(0, 0, 0, $user_birth_d, $user_birth_m, $user_birth_y);
$diff = time() - $birthstamp;
$age_years = floor($diff / 31556926);
if($age_years < 18) {
$mandatory = " <span class=\"mandatory\">*</span>";
}
Men nu tänkte jag istället införa så att personnumret måste formateras såhär:
YYYYMMDDNNNN
Finns det någon smidigt sätt att uppdatera "alla" med rätt 19/20 framför? Det finns ingen som är äldre än 100år, så det bör finnas något halvautomatiskt sätt, men jag har slut på idéer.
Tack!
Borde det inte vara relativt enkelt, typ?
if (substr($age, 0, 2) > 10) {
// sql för att uppdatera alla personnummer med 19 innan.
} else {
// 20 innan
}