datum PHP & MySQL

Status
Niet open voor verdere reacties.

acid007

Gebruiker
Lid geworden
13 jun 2002
Berichten
775
Ik zit met een probleem;

Mysql zet de datum weg als jjjj-mm-dd
ik wil dit niet. Mensen vullen namelijk altijd dd-mm-jjjj in, en dan krijg ik allemaal rare waarde's

Hoe kan ik er voor zorgen dat het Wél werkt ?
 
hmm, wil je er speciale dingen mee gaan doen?

anders zou je het ook als varchar kunnen opslaan.
 
Joh, gebruik timestamps in plaats van stomme vooringevoerde datums! Met de functie time() kun je een timestamp maken die het aantal seconden weergeeft vanaf 1970 (UNIX startdatum) en met functies als date() en strftime() kun je de datum dan weer terugrekenen naar een wat meer leesbaar formaat dat je trouwens helemaal zelf kunt bepalen. Inclusief nederlandse maandnamen!
Ook als gebruikers aan de hand van 3 dropdown lijsten hun geboortedatum of iets dergelijks moeten kiezen kun je daar aan de hand daarvan een timestamp maken d.m.v. mktime().
 
Ik heb al die dingen vanmiddag gelezen en ik snap er geen *** van :)

Ik wil dus (2 velden) Datum&Tijd opslaan in de database, ze daarop sorteren en óók laten weergeven (bijv: Geplaats op 16-1-2003 .::. 23:24 .::. 12 keer bekeken)

Ik snap niet hoe je dat moet doen met die PHP.net links :D
 
Snapje wat ik wil?
Mensen plaatsen een bericht enzo, Ik wil dus dat ik kan zien (en andere bezoekers) waneer ze het bericht geplaatst hebben en evt. hoelaat (tijd is niet echt dringend maar wel handig)

Ze moeten ook nog eens door die 2 waarde's gesorteerd worden zodat ALTIJD de nieuwste bovenaan komt te staan. :)

Anybody?

Grt,
Kurt
 
Pfffffff... Lezen...:

int time ( void)

Retourneert de huidige tijd gemeten in het aantal seconden sinds de Unix Epoch (January 1 1970 00:00:00 GMT).

en dan date():

string date ( string format [, int timestamp])

Geeft een geformatteerde string volgens de gegeven format string gebruikmakend van timestamp of the huidige local time als geen timestamp gegeven is.

en dan mktime():

int mktime ( int hour, int minute, int second, int month, int day, int year [, int is_dst])

Retourneert de Unix timestamp overeenkomend met de argumenten die meegegeven zijn. Deze timestamp is een long integer die het aantal seconden bevat tussen de Unix Epoch (January 1 1970) en de gespecificeerde time.

Dat legt al heel wat uit.

Nu is het gewoon zo dat je in jou geval gewoon time() kunt aanroepen als datum/tijd wanneer het gepost is. Dit is dan dus het aantal seconden sinds 1 1 1970 00:00 (nu al ergens in de 10 cijfers dus check je mysql veldlengte). Dit soort timestamps is ideaal wanneer we willen gaan rekenen ermee. Met een voor ons zoveel zeggende "zaterdag 23 maart 2000 12:37" kan PHP vrij weinig, laat staan uitrekenen hoeveel seconden dat wel niet geleden is.
Dat voeg je in in je database en later als je de meut weer ophaalt maak je er iets moois van met bijv. strftime() zodat die nietszeggende cijfertjes weer een leesbare datum wordt :)
 
Ok, een voorbeeld dan. Daar leren we het meeste van immers ;) :D.

het volgende php script laat ruw de tijd in seconden zien sinds 1970:

PHP:
<?php

echo "Sinds 1-1-1970 zijn er al <b>".time()."</b> seconden voorbij!";

?>

Dit zal zoiets opleveren als het volgende

Sinds 1-1-1970 zijn er al <b>1042897012</b> seconden voorbij!

Nou zegt dit natuurlijk absoluut niets voor de doorsnee internet gebruiker :). Maar met dit cijfer kunnen we wel heel veel doen aangezien we nu kunnen uitrekenen hoeveel seconden het geleden is ten opzichte van de tijd <b>nu</b> en hoe lang het geleden is vanaf deze <i>stamp</i> tot aan het begin. En met deze twee gegevens kunnen we de exacte tijd tot op de seconde nauwkeurig terugkrijgen door simpelweg terug te rekenen (of vooruit, vanaf het begin).
Deze timestamp kun je dus simpelweg als een integer (int(10)) wegschrijven in je tabel van SQL. Pas als je de stamp weer nodig hebt hoef je het uit te rekenen (je hoeft dus niet eerst de timestamp terug te rekenen weer voordat je hem opslaat). Dit is handig voor jou én het komt de snelheid ook nog eens ten goede want MySQL is sneller in het verwerken van getallen dan letters (strings, characters).

In voorbeeld 2 gaan we van die nietszeggende cijfers een leesbare <u>nederlandse</u> (!) datum maken met maandnaam. Kijk mee:

PHP:
<?php

setlocale(LC_TIME, "nl_NL");	//hier geven we aan dat we voor de tijd- en datumnotering nederlandse formaten willen hebben!

/*
	de mooiste manier om een leesbare datum te krijgen is om te werken met
    strftime(). Deze kan het beste overweg met locales
    														*/

$query = mysql_query("SELECT add_stamp FROM items WHERE itemid = '142'");
$result = mysql_fetch_row($query);	//een associatieve array maken waar add_stamp in gaat

echo strftime("%A %e %B %Y, %T", $result[0]);	//het eerste gedeelte is het formaat, het tweede de timestamp uit de query. Formaten zijn te vinden op http://nl.php.net/strftime!


?>

Hier krijgen we dan weer zoiets uit:

zaterdag 18 januari 2003, 14:55:05

Heel erg veel gedetailleerder zul je het niet krijgen maar ik denk dat dit voor veel mensen wel ruim voldoende is hoor :D ;).
 
w00t zomaar snap ik het :)

Thnx voor de lange uitleg, ik vat het nu :p


nog 1 klein vraagje nix bijzonders;
iedereen heeft het over 'notallowedscript'
wat is dat? wat bedoelt men daarmee?
 
gheheh denk daar de no en allowed vanaf en je hebt je antwoord ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan