Avatar billede htx98i17 Professor
25. oktober 2007 - 20:01 Der er 7 kommentarer og
1 løsning

dato vises kun max 20 år frem

Jeg har følgende værdi i mysql: 2040-10-25 00:00:00
som bliver trukket ud med en UNIX_TIMESTAMP()


når jeg så senere echo(date(d-m-Y,$datoframysql)) så skriver den 01-01-1970
hvis jeg ændrer datoen i mysql til 2037-10-25 00:00:00 så vises den korrekte dato

Altså ser det ud til at 'noget' ikke kan klare mere en 30 år frem i tiden?
Avatar billede Slater Ekspert
25. oktober 2007 - 20:08 #1
Fra PHP-manualen:
The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). However, before PHP 5.1 this range was limited from 01-01-1970 to 19-01-2038 on some systems (e.g. Windows).

Men generelt er det også langt bedre at gemme tiden som en INT i databasen. Det er nemmere at trække ud, det er nemmere at omdanne til en pæn dato, det er nemmere at sammenligne og udregne fra. Egentlig har jeg aldrig fattet hvorfor folk bruger timestamps.
Avatar billede Slater Ekspert
25. oktober 2007 - 20:11 #2
Men jeg har lige testet - selvom int datatypen kan indeholde langt mere end de ca. 2 milliarder sekunder som år 2038 svarer til, så kan man ikke parse dem med date() funktionen :(
Avatar billede dkfire Nybegynder
25. oktober 2007 - 21:22 #3
timestamps er nemmere at bruge når det handler om datoer. Det skyldes at hvis du vil behandle et timestamp, f.eks. hvis du kun hente dagens navn ud er det meget nemmere med timestamp.

Men korrekt viperine, et timestamp går kun til ca. år 2038. Dette skyldes et levn fra den gang operativsystemer blevet opfundet, hvor der ikke var plads til at regne med at for store tal,  max 32 bit. Man valgte netop også dengang at startdatoen skulle være 1.1.1970.
Avatar billede Slater Ekspert
25. oktober 2007 - 21:34 #4
Ikke for at stjæle emnet her, men jeg er nysgerrig hvis der er noget jeg har overset.
Hvordan er det nemmere kun at tage dagen fra et timestamp, end bare at skrive date("l", $time) på en int?
Avatar billede htx98i17 Professor
26. oktober 2007 - 07:14 #5
Er det mysql eller funktionen date() som ikke vil regne ud over 30 år?

Og hvordan gør man ellers?
Avatar billede Slater Ekspert
26. oktober 2007 - 10:10 #6
Det er date() funktionen og timestamp der ikke kan, men date() funktionen er problemet, for ellers ville du bare kunne bruge en int. En BIGINT datetype i MySQL ville kunne tælle til år 292471210647.

Jeg ved faktisk ikke hvordan man løser problemet, når date() funktionen ikke kan. Sorry.
Avatar billede htx98i17 Professor
10. december 2007 - 20:27 #7
tak for deltagelsen

viperine vil du have point?
Avatar billede htx98i17 Professor
15. januar 2008 - 10:19 #8
lukker
tak for deltagelsen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester