Dato og tid med PHP og MySQL?

Tags:    php

Hej,

I mit brugersystem (php/mysql) vil jeg gerne kunne lege med datoer. Jeg vil kunne gemme følgende:

- Oprettet dato/tid
- Sidst logget ind dato/tid
- Nyhed oprettet dato/tid
- Udregne (alder fra en given dato, hvor lang tid der er gået siden xx/xx-xxxx)

Hvordan gør jeg det nemmest? Skal jeg oprette to felter, en til dato og en til tidspunkt? Eller kan jeg nøjes med en - i så fald hvilken metode? Jeg kender date()-funktionen i PHP, men jeg ved ikke hvordan den skal gemmes/formateres i databasen for at kunne udføre ovenstående punkter.

På forhånd tak :)



6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Disse tre ting handler blot om at have de rigtige felter i databasen.

Oprettet dato/tid
Ved oprettelse gemmer du også tidspunktet. F.eks kan du snildt have et felt af typen timestamp hvor i du gemmer værdien fra NOW().
Eksempel:
Fold kodeboks ind/udSQL kode 


Sidst logget ind dato/tid
Ved valideringsprocessen af brugeren, efter brugeren er valideret opdateres feltet last_login. Ligesom Jesper skriver:
Fold kodeboks ind/udSQL kode 


Nyhed oprettet dato/tid
Ved oprettelse gemmer du også tidspunktet. F.eks kan du snildt have et felt af typen timestamp hvor i du gemmer værdien fra NOW().
Eksempel:
Fold kodeboks ind/udSQL kode 


Alder kan udregnes på flg. måde (i SQL):
Fold kodeboks ind/udSQL kode 


...og data kan hentes på sædvanligvis:
Fold kodeboks ind/udPHP kode 


Bemærk, intet er testet. Dog ser jeg ingen umiddelbare fejl. :)

---

Steffan, det er fandme da en mystisk måde at regne på. :) Hvorfor bruger du ikke MySQL timestamps, de går jo også tilbage til før 1970.




Indlæg senest redigeret d. 16.10.2010 13:17 af Bruger #10216
Det er der mange måder at gøre på. Hvad der er nemmest? Det er jo individuelt, men her er et par eksempler:

Oprettet:
Fold kodeboks ind/udPHP kode 


Samme eksempel kan bruges til sidst logget ind, blot man udskifter Oprettet med Sidst logget ind. Skal det være mere kompleks, kan man bruge:

Sidst logget ind:
Fold kodeboks ind/udPHP kode 


Fødselsdatoen kan gøres således:
Fold kodeboks ind/udPHP kode 


Og du kan hente fødselsdagen:

Fold kodeboks ind/udPHP kode 




Jeg vil helt sikkert foreslå dig at bruge de muligheder der er i Database systemet MySQL til dato og tid (timestamp) da det vil gøre det nemmere for dig hvis du skal lave nogle range quries eller noget over disse tider.

Du kan bruge functionen NOW() som automatiske vil indsætte den nyeste dato fx:

Fold kodeboks ind/udSQL kode 


Der er flere forskellige måder at gemme dato og tid i MySQL men jeg vil foretrække timestamp eller datetime, da du så kun har et felt at opdatere for både tid og dato.



Mange tak for jeres svar.

Lige endnu en ting, som jeg glemte at nævne. Det er at jeg også gerne vil have mulighed for at udskrive den pågældende dag for datoen.

Er det muligt med begge jeres metoder? Og hvordan? :D



Hvad er der mystisk ved det?

Fordi jeg godt kan lide at have mine koder delt op. HTML til fremvisning, PHP til logik, og MySQL til at lagre og hente ting fra databasen. Hvis jeg begynder at bruge MySQL til logiske komponenter som f.eks dato eller kryptering, bryder jeg den rytme, jeg arbejder efter, og som jeg finder overskuelig. Der er vi programmører heldigvis forskellige :)

De eneste datoer jeg skal bruge, som ligger før 1970 er potentielt fødselsdatoer og disse bliver ikke lavet med strftime() functionen, men formentligt med en input, eller select/option form.

For at hente ugedagen med strftime()
Fold kodeboks ind/udPHP kode 




For at hente ugedagen med strftime()
Fold kodeboks ind/udPHP kode 


Man kunne også gøre det som på http://www.phptips.dk/brug_danske_dage_og_maaneder.tip

Fold kodeboks ind/udPHP kode 




t