Tips wat betreft Datum
Voor een nieuw project moet ik een agenda systeem maken. daarvoor moet ik een admin gedeelte maken waar mensen een datum kunnen invoeren en de activiteit die er op die datum is.
Nu moet het ook zijn dat de datum op volgorde getoond moet gaan worden en de data's die verleden zijn automatisch uit de agenda verdwijnen.
bijvoorbeeld:
de datum van vandaag is 30 december 2006
Activiteiten:
30 december t/m 31 december
kamp
31 december
oudjaars feest.
---------------------------------
Nu wil ik graag advies van jullie hoe ik dit het beste kan aanpakken met de database indeling en database functies, en advies over de berekening die ik nodig heb.
Tabel zal er ongeveer zo uitzien:
agendaId
gebruikerId
omschrijving
begindatumtijd
einddatumtijd
status (bijvoorbeeld belangrijk, afgezegd)
label (eventueel extra label, werk, school)
En dan voor het weergeven kijken welke activiteiten tussen vandaag en de begindatum en tussen vandaag en de eindatum zitten.
Er zijn dus veel tips te geven, maar één heel belangrijke: als users zelf een datum moeten intypen (dus in een input type text) gaat het onherroepelijk fout. Werk dus met selects, of met een calender popup (die zijn wel te vinden via Google)
Verder zie ik in je voorbeeld dat je zowel afspraken over meer dan 1 dag wilt hebben, als afspraken op 1 dag. Ik zou twee velden type DATETIME maken, noem ze van en tot of zo, dan kun je alle kanten op.
Dat ziet er ongeveer zo uit
$query = "DELETE FROM agenda WHERE UNIX_TIMESTAMP(`datum`)<$timestamp_now" ;
Edit:
ik zou voor het opslaan van de datum zowiezo gaan voor het unix_timestamp formaat. Hier kun je namelijk eventueel ook nog tijden in verwerken (mocht je dit nodig vinden)
ik zou voor het opslaan van de datum zowiezo gaan voor het unix_timestamp formaat. Hier kun je namelijk eventueel ook nog tijden in verwerken (mocht je dit nodig vinden)
Gewijzigd op 01/01/1970 01:00:00 door Jacco Engel
Overigens zou ik niet zomaar beginnen aan het verwijderen van agenda items, zou pas na een maand of als de gebruiker het aangeeft doen.
Ik denk dat zoals Jan koehoorn met de datetime tabellen de beste optie is voor dit. Ook inderdaad met een select deel, ipv input type text.
Webmakerij ook jou voorbeeld ga ik zeker gebruiken
Jacco, ik denk dat ik jou stukje wel ga gebruiken maar niet met delete. ik denk dat ik dat ga gebruiken voor de lus met 'wat te laten zien' zoals webmakerij zegt.
En dan maak ik er een gedeelte in waar de admin oude items handmatig kan verwijderen.
Zoals ik al aangaf mischien is het een idee om alles in UTS formaat op te slaan. Mischien is het nu niet nodig tijden er bij te kunnen vermelden maar als het later wel nodig blijkt te zijn scheelt je dat een hoop werk :)
@ Jacco: die UTS is een slecht idee. Het bereik van een DATETIME is veel groter, en je kunt er alle datum- en tijdfuncties van MySQL op loslaten.
UTS heeft alleen tijd als extratje vergeleken met DT of zijn er meer verschillen?
edit:
Ik lees nu het stukje van Jan. Dat is me duidelijker nu. Dus DT, is uiteindelijk een beter optie, als ik het zo lees. ook met wat tuts erbij gepakt te hebben
Gewijzigd op 01/01/1970 01:00:00 door Tim Groot
I rest my case :)
http://arjan.i-cey.net/agenda/ inloggen met test:test, hij staat hier ook in de scriptdatabase. Wellicht kan je er wat uithalen.
SELECT DATE_FORMAT(datumtijd, '%Y-%m-%d') AS datum
FROM tabelnaam
geeft iets als '2006-12-30'
SELECT DATE_FORMAT(datumtijd, '%H:%i') AS datum
FROM tabelnaam
geeft iets als '12:15'
Zie ook het MySQL manual voor andere type-specifiers.
http://www.phphulp.nl/php/scripts/7/690/
maar misschien kan ik hier ook nog wel wat mee.
Jan bedankt voor je nadere uitleg
Dit is waar het om gaat, deze zorgt ervoor dat al je variabelen goed staan, datums kloppen (selecteer maar eens een dag die niet bestaat) etc etc. De rest heb ik er in 10 minuten omheen gebouwd als voorbeeld van de mogelijkheden.
ik ga je script even goed doorneuzen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
CONCAT(
ELT(DAYOFWEEK(datum),
'zondag', 'maandag', 'dindsag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
),
' ',
DAYOFMONTH(datum),
' ',
ELT(MONTH(datum),
'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'
),
' ',
YEAR(datum)
) AS date_format
FROM
tabelnaam
CONCAT(
ELT(DAYOFWEEK(datum),
'zondag', 'maandag', 'dindsag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'
),
' ',
DAYOFMONTH(datum),
' ',
ELT(MONTH(datum),
'januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'
),
' ',
YEAR(datum)
) AS date_format
FROM
tabelnaam
Dit geeft je keurig de dagnaam, dagnummer, maand en jaar als date_format retour.