webForumDet fria alternativet

Räkna ut ålder från personnummer?

PHP

14 svar · 3 565 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

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!

Medlem sedan juli 20033 147 inlägg
#2

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
Medlem sedan juli 200012 978 inlägg
#3

Du har ju hela veckan på dig. Det är ju inte förrän den femtonde!

Medlem sedan nov. 20016 480 inlägg
#4

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!

?

Medlem sedan juli 200012 978 inlägg
#5

;) > bassebhu Kolla profilen för vänstertecknad ;)
På skoj :e

Medlem sedan nov. 20014 054 inlägg
#6

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: 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!

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;
}

?>
Medlem sedan juli 20033 147 inlägg
#7

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})));

}
Medlem sedan juni 20014 290 inlägg
#8

Titta på kommentarerna på denna sida för hur man kan räkna ut det: http://se.php.net/manual/en/function.getdate.php

Medlem sedan juli 20023 617 inlägg
#9

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.";
?>
Medlem sedan nov. 20016 480 inlägg
#10

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 :)

Medlem sedan juli 20023 617 inlägg
#11

bassebhu skrev:

Fiolgnidarens...

"Fåret glädja oss även efter dess död genom den ljuvliga klangen från dess tarmar."

Medlem sedan nov. 20016 480 inlägg
#12

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

Medlem sedan juli 20033 147 inlägg
#13

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. :)

Medlem sedan feb. 20034 441 inlägg
#14

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!

Medlem sedan juli 20033 147 inlägg
#15

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
}
1700 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
347 ms — deklarationer (db)
0 ms — hämta statistik (cache)
1333 ms — hämta tråd, inlägg och bilagor (db)
364 ms — ändringar (db)