webForumDet fria alternativet

Lagra ålder för personer födda tidigare än 1970

PHP

7 svar · 386 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Har insett att jag använder fel datatyp i min mysql-databas när jag lagrar date-of-birth för en person. Den datatyp jag använder nu är date. Men den tillåter bara personer att vara 35 år gamla och det håller ju inte.

Vilken datatyp ska jag använda mig av istället?

Medlem sedan aug. 20002 975 inlägg
#2

DATE går alldeles utmärkt all lagra äldre datum i.

Medlem sedan juli 2004103 inlägg
#3

DATE
A date. The supported range is '1000-01-01' to '9999-12-31'. MySQL displays DATE values in 'YYYY-MM-DD' format, but allows you to assign values to DATE columns using either strings or numbers.

http://dev.mysql.com/doc/mysql/en/date-and-time-type-overview.html

Medlem sedan apr. 20041 597 inlägg
#4

Tack för tipsen.

I mitt fall kan det nog vara så att det går utmärkt att använda DATE för lagring i databasen men att det är så att den funktion jag har som räknar ut en persons aktuella ålder baserat på date-of-birth ställer till det. Jag vet att den har gett mig felmeddelanden när en person överskrider 1970. Vet inte riktigt om det finns en sådan begränsning i funktionen.

Så här ser funktionen ut iaf:

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

När en person går från att vara född 1970 till 1969 så får jag följande felmeddelande i användarprofilen som visas på sidan:

Warning: getdate() [function.getdate]: Cannot perform date calculation in C:\xxx

Ligger det någon begränsning i funktionen getdate() för vad den klarar att ta emot?! :OO

Medlem sedan juni 200032 967 inlägg
#5

Ligger det någon begränsning i funktionen getdate() för vad den klarar att ta emot?!

Om webbservern är en Windowsserver så är det dessvärre så att php-tolken inte kan hantera datum tidigare än 1970 med de befintliga funktionerna.

http://se.php.net/manual/en/function.date.php

Medlem sedan apr. 20041 597 inlägg
#6

:(

Det jag vet är att jag har mitt serverutrymme på en "FreeBSD-server - Obelix" hos Aleborg. Jag har trott att de kör en linuxversion på den servern. Men det kanske inte är fallet?

Om inte denna metod att ta reda på en persons ålder fungerar kanske någon annan har en likvärdig funktion?

Medlem sedan nov. 20041 740 inlägg
#7

Rent spontant ser det ut som om du ligger på en Windowsserver från ditt felmeddelande.

C:\xxx

Men hör av dig till Aleborg och fråga, det brukar inte vara svårt att få svar därifrån.

Medlem sedan apr. 20041 597 inlägg
#8

Ska göra det!

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)