---
title: "Från datetime till ålder"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/51009-från-datetime-till-ålder"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Webslave"
published: "2002-08-22T13:57:14.000Z"
updated: "2002-08-22T20:09:51.000Z"
replies: 18
views: 702
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/51009-från-datetime-till-ålder"
---

# Från datetime till ålder

## #1 — Webslave, 2002-08-22T13:57Z

Yo!
Jag sitter och försöker klura ut hur jag ska ta och omvandla födelsedatum till hur gammal en person är.
Jag har informationen i "datetime" (0000-00-00) i variabeln "$user_age" och funderar på om någon har ett bra tips till hur man kan omvandla det till hur gammal man är i år? Alla tips välkommnas.

Permalänk: https://www.webforum.nu/p/51009

## #2 — Viktor, 2002-08-22T13:59Z

Kolla här, kanske är något :)
<http://www.phpbuilder.com/columns/akent20000610.php3?page=7>

/Viktor

Permalänk: https://www.webforum.nu/p/760924

## #3 — Webslave, 2002-08-22T14:02Z

Jag kom, jag såg och jag förstod inte ett jota :)

Permalänk: https://www.webforum.nu/p/760927

## #4 — Viktor, 2002-08-22T14:16Z

Det är absolut ingen perfekt kod (du får inte exact rätt antal månader och år alltid men bra nära tror jag. Räknar med 30.5 dagar/månad och 365.25 dagar/år

Funktionen tar 2 datum minus varandra så den får antalet sekunder mellan de 2 datumen och trixar lite med matte efter det för att göra om sekunder till dagar, veckor, månader och år.

```php
<?

	Function DateDiff ($interval, $date1,$date2)
	{
		// get the number of seconds between the two dates
		$timedifference =  $date2 - $date1;
		switch ($interval)
		{
			case "y":
				$retval = bcdiv($timedifference, 31557600);
				break;
			case "m":
				$retval = bcdiv($timedifference, 2635200);
				break;
			case "w":
				$retval  = bcdiv($timedifference ,604800);
				break;
			case "d":
				$retval  = bcdiv( $timedifference,86400);
				break;
			case "h":
				$retval = bcdiv ($timedifference,3600);
				break;
			case "n":
				$retval  = bcdiv( $timedifference,60);
				break;
			case "s":
				$retval  = $timedifference;
				break;
		}
		return $retval;
	}
?>

<?
	$currenttime = time();
	$newtime = mktime (0,0,0,9,12,1980);
	$temptime = DateDiff ("y",$newtime ,$currenttime);
	echo "Interval between two dates: ".$temptime;
?>
```

Skicka med de 2 datum som du vill gämföra (now och 1980-09-12 i detta exempel) och vad du vill ha som svar, y=year, m=month, w=week osv.
Hoppas du fattar lite mer nu :)

/Viktor

Permalänk: https://www.webforum.nu/p/760933

## #5 — Jörgen HP, 2002-08-22T15:30Z

En av många trådar som beskriver dit problem:

<http://www.webforum.nu/showthread.php?s=&threadid=14357&highlight=%E5lder>

Permalänk: https://www.webforum.nu/p/760988

## #6 — Webslave, 2002-08-22T16:16Z

Tackar Jörgen... det blev kanske inte exakt som man ville men nsätan. Det blir ju att om man är född 1980-06-02 så är man 22 2002-01-01 (den räknar bara åren) men om ingen annan kan komma med en lite modifiering på den så får det duga ;)

Permalänk: https://www.webforum.nu/p/761038

## #7 — Viktor, 2002-08-22T16:25Z

??
Det scriptet som jag postade fungerar :) där blir man bara 21 om man knappar in de datum som du har som exempel :)

/Viktor

Permalänk: https://www.webforum.nu/p/761045

## #8 — Webslave, 2002-08-22T16:28Z

Viktor... jag förstår inte ditt script, det var därför jag itne använde det... jag ser inte hur jag ska kunna få ut en ålder av det där (newbie) om du orkar förklar vad allt betyder så tar jag gärna ditt script... man vill ju kunna vara så precis som möjligt ;)

Permalänk: https://www.webforum.nu/p/761050

## #9 — Viktor, 2002-08-22T16:33Z

DateDiff=avstånd mellan 2 datum, tex ett födelsedatum och dagens datum :)
Du kan altså få antalet år som har gått mellan 1980-06-02 och 2002-01-01 genom att anroppa funktionen DateDiff på följande sätt

```php
$dagensdatum = mktime(0,0,0,1,1,2002);
$fodelsedatum = mktime (0,0,0,2,06,1980);
$alder = DateDiff ("y",$fodelsedatum ,$dagensdatum);
echo "Ålder (i år): ".$alder;
```

/Viktor

Permalänk: https://www.webforum.nu/p/761057

## #10 — Webslave, 2002-08-22T16:36Z

Men om jag hämtar datumet från variabeln $rad\["user_age"\] vart ska då den in i hela den där kallasen med kod? :)

Permalänk: https://www.webforum.nu/p/761058

## #11 — Viktor, 2002-08-22T16:47Z

Jag är inte någon hejjare på PHP (kan egentligen inget om det :)) men det borde finnas någon formaterings funktion för datum, typ 

```php
date("yyyy-mm-dd",$rad["user_age"])
```

kolla på <http://www.php.net>.

/Viktor

Permalänk: https://www.webforum.nu/p/761082

## #12 — Webslave, 2002-08-22T16:56Z

Det där vet jag men jag syftade i den kod som du har givit mig.

Permalänk: https://www.webforum.nu/p/761096

## #13 — Jörgen HP, 2002-08-22T17:01Z

När du gjort din datediff mellan födelsedatumet och dagens datum (i dagar) delar du kalaset med 365.2375, då får du fram rätt antal år, på dagen. :)

Permalänk: https://www.webforum.nu/p/761101

## #14 — Viktor, 2002-08-22T17:01Z

```php
$dagensdatum = mktime(0,0,0,1,1,2002);
$fodelsedatum = mktime (0,0,0,2,06,1980); <-- Här är det som du får lägga in ditt datum, $rad["user_age"] 
$alder = DateDiff ("y",$fodelsedatum ,$dagensdatum);
echo "Ålder (i år): ".$alder;
```

/Viktor

Permalänk: https://www.webforum.nu/p/761102

## #15 — Webslave, 2002-08-22T19:24Z

Det gick inte bra det... jag hämtar användarens födelsedag ($rad\["user_age"\]) och lägger in den, och sedan så ska den jämföras med dagens datum ($date) och då la jag in $date... titta hur jag gjorde nedanför:

```php
$dagensdatum = mktime($date);
$fodelsedatum = mktime ($rad["user_age"]);
$alder = DateDiff ("y",$fodelsedatum ,$dagensdatum);
echo "Ålder (i år): ".$alder;
```

Och den returnerar 0...

Permalänk: https://www.webforum.nu/p/761257

## #16 — Matte, 2002-08-22T19:43Z

I mktime() ska du plocka in tidsdelarna kommaseparerade:
mktime(timme, minut,sekund,månad,dag,år) 
du får ut ett unix timestamp.

Du behöver inte använda mktime överhuvudtaget i ditt skript.

I din sql-sats skriver du:

```
SELECT UNIX_TIMESTAMP(user_age) as user_age FROM tabell
```

 Då får du ut user_age som unix timestamp.

För att få aktuellt timestamp använder du time(). Använder du UNIX_TIMESTAMP() i din sql-sats så blir ditt skript:

```
$dagensdatum = time();
$fodelsedatum = $rad["user_age"];
$alder = DateDiff ("y",$fodelsedatum ,$dagensdatum);
echo "Ålder (i år): ".$alder;
```

Permalänk: https://www.webforum.nu/p/761281

## #17 — Viktor, 2002-08-22T19:44Z

Det ända som jag kan gissa på är att $rad\["user_age"\] inte är av rätt format, det måste formateras till ett datum (datatypen date) för att det ska fungera. Som du har skrivit det nu så blir det nog error i mktime och det blir samma som $date.

/Viktor

Permalänk: https://www.webforum.nu/p/761283

## #18 — Webslave, 2002-08-22T19:54Z

Tackar Matte... det där fungerade perfekt ;)

Permalänk: https://www.webforum.nu/p/761295

## #19 — Matte, 2002-08-22T20:09Z

Sen skulle du förstås kunnat ta fram det direkt i sql-frågan:

```
$sql = "SELECT DATE_FORMAT(
        FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(user_age)+1), '%Y')+0
        AS age FROM tabell";
$result = mysql_query($sql);
$rad = mysql_fetch_array($result);
echo "Ålder: ".$rad['age'];
```

Permalänk: https://www.webforum.nu/p/761318

---

Tråden på webben: https://www.webforum.nu/amne/php/51009-från-datetime-till-ålder
