---
title: "Född => Ålder"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/14800-född-ålder"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Swey"
published: "2000-09-13T18:31:00.000Z"
updated: "2000-09-15T20:19:00.000Z"
replies: 13
views: 562
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/14800-född-ålder"
---

# Född => Ålder

## #1 — Swey, 2000-09-13T18:31Z

Någon som lyckats göra om en dag när man är född till en ålder?

"1980-09-14" ska bli 19 idag och 20 imorgon.

har försökt att göra om strängen till en UNIX timestamp och sedan ta time() minus den. Men det gick inte alls.

Har någon förslag på hur man kan lösa detta?

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

## #2 — emission, 2000-09-13T21:48Z

PHP suger lite när dt gäller datumhanteringen..

```
$dp=explode("-","1980-09-14");       
                    
$olddate=mktime(0,0,0,$dp[1],$dp[2],$dp[0]);             
                        
echo floor((time()-$olddate)/(3600*24*365,25));
```

borde skriva ut åldern. Ingen höjdare, jag vet...

```
$age=1969-date("Y",$olddate-time());
```

skulle kunna vara något också...

\[Redigerat av emission den 13 sep 2000\]

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

## #3 — Swey, 2000-09-13T22:20Z

Den sista fungerade inte. Den gav ett negativt tal som gjorde att date-funktionen inte ville fungera.

Men den andra lösningen fungerade utmärkt. Tack!

**r** Nej, förresten. Efter att ha testat koden med massor av olika fall så har jag sett att den inte fungerar om man är född innan 1969. Då blir åldern alltid 30. Visst är det bra för de som inte vill åldras efter 30 men inte för andra. :)

Varför detta?

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

## #4 — Csson, 2000-09-13T22:56Z

Misstänker att det kan ha att göra med att Unix utgår från 1970-01-01 i sin sekundräkning. Alla årtal dessförinnan skulle i så fall få sekund 0 som värde.

/Csson

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

## #5 — sgtpepper, 2000-09-14T07:33Z

Den här lösningen borde funka.

in =\> $birth
ut =\> $age

```
	$birth = explode("-",$birth); 
	$today = explode("-",date("Y-m-d", time()));
	
	$age = $today[0] - $birth[0];

	if ($today[1] - $birth[1] < 0 &#0124;&#0124; ($today[1] - $birth[1] == 0 && $today[2] - $birth[2] < 0)) $age--;
```

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

## #6 — Robban, 2000-09-14T15:29Z

Japp, den sista borde funka. Man behöver dock inte använda explode() om man inte vill. Finns färdiga funktioner för att formatera datum. :)

t.ex.

```
function age($birthdate) {
  $ts = getdate(strtotime($birthdate));
  $te = getdate(time());
  return $te['year'] - $ts['year'] - (($te['mon'] < $ts['mon'])
   &#0124;&#0124; (($te['mon'] == $ts['mon']) && ($te['mday'] < $ts['mday'])));
}
```

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

## #7 — sgtpepper, 2000-09-14T15:52Z

Jo, fast du kan inte använda funktioner som använder UNIX timestamp eftersom dessa börjar från den första januari 1970..

Så min lösning funkar fortfarande bäst :)

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

## #8 — Robban, 2000-09-14T20:13Z

> Jo, fast du kan inte använda funktioner som använder UNIX timestamp eftersom dessa börjar från den första januari 1970.

Bara för att man får negativa "timestamps" för datum före 1970-01-01 så innebär det inte att man inte kan räkna med dem. Spelar ju ingen som helst roll om talet är negativt eller inte då det är differensen som är intressant. :)

Funktionen är testad med årtal före 1970, och jag har inte märkt av några problem.

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

## #9 — sgtpepper, 2000-09-14T21:10Z

Sannerligen, det funkar :) :r

Jag testade tidigare idag på en W2000-burk, kanske var det som ställde till det?

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

## #10 — Robban, 2000-09-15T02:21Z

Windowsversionen av PHP har ju dragits med vissa problem (fråga Swey :) ), så det är möjligt. Installera senaste versionen (4.0.2). Tror många buggar är fixade just när det gäller funktionen i Win32.

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

## #11 — Swey, 2000-09-15T11:06Z

Robban, jag testade koden på min W2k-burk med senate versionen av PHP och det funkade inte på år före 1970.

Warning: Cannot perform date calculation in test.php on line 2

Det är möjligt att det fungerar i Unix-versionen men jag vill helst bygga skript som fungerar på båda plattformarna.

Så sgtpeppers kod är det enda som har fungerat hittils på min burk.

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

## #12 — Robban, 2000-09-15T11:35Z

Där ser man. :l

Skall man anmäla detta som en bug i Win32-versionen tro?

\[redigerat\]
En snabb koll tyder på att det är systemberoende. Verkar helt enkelt vara \*nix som använder fler bitar för att representera datum. Ingen bug i PHP alltså.

> Year may be a two or four digit value, with values between 0-69 mapping to 2000-2069 and 70-99 to 1970-1999 (on systems where time_t is a 32bit signed integer, as most common today, the valid range for year is somewhere between 1902 and 2037).

Hade jag ingen aaaning om. Hur kan ni använda ett så antikt system? ;)
\[/redigerat\]

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

## #13 — Swey, 2000-09-15T11:50Z

Vet inte om det är en bugg. Detta är koden jag provade och utdata.

```
<?
function age($birthdate) {
  $ts = getdate(strtotime($birthdate));
  $te = getdate(time());  return $te['year'] - $ts['year'] - (($te['mon'] < $ts['mon'])   &#0124;&#0124; (($te['mon'] == $ts['mon']) && ($te['mday'] < $ts['mday'])));
}

echo "1990-01-01: " . age("1990-01-01");
echo "1969-01-01: " . age("1969-01-01");

?>
```

Utdata:
1990-01-01: 10
**Warning**:  Cannot perform date calculation in **e:\\inetpub\\wwwroot\\test.php** on line **3**
1969-01-01: 2000

**r** Windows använder 64-bitars tid och har inga problem med datum före 1970 så jag vet inte vad du menar.

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

## #14 — Robban, 2000-09-15T20:19Z

> Windows använder 64-bitars tid och har inga problem med datum före 1970 så jag vet inte vad du menar.

Citerade manualen (och jag inkluderade en ;) för säkerhets skull, så att ingen skulle ta åt sig). :)

Du vet alltså med säkerhet att time_t har 64 bitar i W2k? Tja, i så fall måste det ju vara en bug i PHP.

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

---

Tråden på webben: https://www.webforum.nu/amne/php/14800-född-ålder
