Toon posts:

[PHP] Date drives me nuts :?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey,

Ik ben zelf een ecard systeem aan het bouwen, en het is bijna af. Alles loopt, alleen moet ik kaarten ouder dan 14 dagen verwijderen. Nu prop ik alles in mySQL. Eerst maakte ik met date()de datum die ik meegaf in de database. Ik kreeg dan bijvoorbeeld 2001-10-10, maar nu kwam ik er achter (of ik begrijp het niet) dat daar eigelijk niet mee te rekenen is. Toen dacht ik laat ik de date functie van mySQL gebruiken. Dus ik heb de tabel aangepast en date voor het datum veld gebruikt. Nu plaatst hij automatisch de datums, en gebruikt hij niet die die ik met PHP date("Y-m-d") aanmaak. Op zich niet zo erg als hij de datum van vandaag zou gebruiken, maar deze datums van mySQL kloppen niet, 2003-09-01 zou de datum van vandaag moeten zijn in dat geval. Ik snap er dus echt helemaal niks meer van. Kan iemand mij nou eens duidelijk uitleggen hoe je met datums rekend en hoe je bijvoorbeeld uit een database alle datums van een bepaalde periode kan selecteren om bijvoorbeeld te wissen? Want ik heb in de search rondgekeken, en dit schijnt toch een moeilijk onderwerp te zijn waar ongetwijfeld meer mensen mee zitten :?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Wat is het datatype van je het datumveld?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
date en het formaat dat mySQL aangeeft is dan 0000-00-00

CREATE TABLE cardcontent (
id tinyint(6) NOT NULL auto_increment,
cardid tinyint(4) DEFAULT '0' NOT NULL,
date date DEFAULT '0000-00-00' NOT NULL,
microtime varchar(20) NOT NULL,
sname varchar(20) NOT NULL,
semail varchar(40) NOT NULL,
rname varchar(20) NOT NULL,
remail varchar(40) NOT NULL,
text blob NOT NULL,
PRIMARY KEY (id)
);

  • Kjev
  • Registratie: Juni 2001
  • Laatst online: 02-01-2024
Vult 'date' wel automatisch de datum in als je een veld toevoegt? Dacht het niet. Doe gewoon eens
PHP:
1
2
3
4
<?
$date = date("Y-m-d H:i");
mysql_query("...blaat...." . $date . ".. meer geblaat");
?>

Wat betreft je topictitel trouwens; ik begrijp dat de datum je genitaliën bestuurt :P?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je kan imo beter TIMESTAMP gebruiken. Neem even kijkje in de manual.

Je kunt je tabel dan makkelijk converteren door een extra timestamp veld toe te voegen, een update query te doen voor alle records waarbij je de waarde van het oude date veld gewoon in het timestamp veld stopt, remove het oude date veld, en rename het nieuwe timestamp veld.

Gebruik vervolgens de date/time functies van MySQL om je date te formatten bij je select-queries

hth :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

als je het veld als type timestamp(8) geeft, dan kun je zo de datum wegschrijven: YYYYMMDD

en zo ophalen
PHP:
1
2
3
<?
SELECT date_format(`veldnaam`,"%d-%m-%y") AS `naam` FROM `tabelnaam` WHERE ......
?>

dan krijg je DD-MM-YYYY in `naam`

als ik ga rekenen doe ik altijd:
PHP:
1
2
3
<?
SELECT UNIX_TIMSTAMP(NOW()) AS `now`,UNIX_TIMESTAMP(`veldnaam`) AS `date` WHERE ....
?>

en dan kun je met `now` en `date` gaan rekenen ;)

/edit

zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$query = mysql_query("SELECT SELECT UNIX_TIMSTAMP(NOW()) AS `now`,UNIX_TIMESTAMP(`veldnaam`) AS `date`");
$data = mysql_fetch_object($query);
$verschil = $data->now - $data->date;
$dag = 3600 * 24;
if($verschil <(4 * $dag))
{
    echo"blaat";
}
else
{
    echo"blaat";
}
?>

niet getest

mijn T.net systeemspecspagina


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Op maandag 10 december 2001 16:30 werkte RRX even iets uit wat leek op wat drm al zei
Is denk ik niet zo handig. Je moet zoveel mogelijk het formatten van je data binnen de SQL query houden (is overzichtelijker en makkelijker te onderhouden)

Dus als je er een mysql timestamp van maakt kun je zo gaan werken:
code:
1
2
SELECT CONCAT(DAYOFMONTH(date),'-',MONTH(date),'-',YEAR(date)) AS formatted
FROM tabel

En bij inserten kun je "gewoon" genoteerde data gebruiken:
code:
1
2
INSERT INTO tabel(date)
VALUES('12-12-2001');

of now functie:
code:
1
2
INSERT INTO tabel(date)
VALUES(NOW());

etcetera. Zie manual voor details

edit:
*klik*

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Op maandag 10 december 2001 16:41 schreef drm het volgende:

[..]

Is denk ik niet zo handig. Je moet zoveel mogelijk het formatten van je data binnen de SQL query houden (is overzichtelijker en makkelijker te onderhouden)
[..]
PHP:
1
2
3
<?
date_format(`veldnaam`,"%d-%m-%y") AS `naam`
?>

is toch ook het formatten van data binnen de SQL query :?

mijn T.net systeemspecspagina


Verwijderd

Topicstarter
Op maandag 10 december 2001 16:41 schreef drm het volgende:

[..]

Is denk ik niet zo handig. Je moet zoveel mogelijk het formatten van je data binnen de SQL query houden (is overzichtelijker en makkelijker te onderhouden)

Dus als je er een mysql timestamp van maakt kun je zo gaan werken:
code:
1
2
SELECT CONCAT(DAYOFMONTH(date),'-',MONTH(date),'-',YEAR(date)) AS formatted
FROM tabel

En bij inserten kun je "gewoon" genoteerde data gebruiken:
code:
1
2
INSERT INTO tabel(date)
VALUES('12-12-2001');

of now functie:
code:
1
2
INSERT INTO tabel(date)
VALUES(NOW());

etcetera. Zie manual voor details

edit:
*klik*
Oke, ik heb nu alles als timestamp in de database staan. So far so good. mySQL pakt automatisch 14 tekens, lijkt me niks mis mee. Hoe kan ik nou alle kaarten selecteren die 14 dagen of ouder zijn? Want alleen dat rekenen met timestamps snap ik nog niks van geloof ik :?

  • Joeroenho
  • Registratie: Augustus 2001
  • Niet online
offtopic:
Topictitel doet vermoeden alsof de datum je ballen aanstuurt :) Lijkt me niet echt.... Toch?


edit:

Te laat he....

Amateurcoureur en fervent banktukker


Verwijderd

Topicstarter
Op maandag 10 december 2001 16:15 schreef KevinLevie het volgende:
Wat betreft je topictitel trouwens; ik begrijp dat de datum je genitaliën bestuurt :P?
Errrrrr, ik kijg wel jeuk van dit soort problemen jah :+

my had me moeten zijn ;)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

RRX:
PHP:
1
2
3
<?
date_format(`veldnaam`,"%d-%m-%y") AS `naam`
?>

is toch ook het formatten van data binnen de SQL query :?
|:( sorry, keek niet goed... my bad O-)
eldeejee:
Oke, ik heb nu alles als timestamp in de database staan. So far so good. mySQL pakt automatisch 14 tekens, lijkt me niks mis mee. Hoe kan ik nou alle kaarten selecteren die 14 dagen of ouder zijn? Want alleen dat rekenen met timestamps snap ik nog niks van geloof ik :?
Als je eventjes bladert door de mysql date/time functies kun je best wel bedenken in wat voor richting je moet gaan, hoor. Zie linkje ^^^

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Je moet het probleem even iets beter voor me beschrijven :?

Als ik een date heb, en ze berijdt m'n nuts, ervaar ik dat meestal niet als een probleem...



Ja ja, ik weet het, spuit elf enzo. Maar ik kon het gewoon niet laten...

Verwijderd

Topicstarter
Op dinsdag 11 december 2001 09:55 schreef drm het volgende:
Als je eventjes bladert door de mysql date/time functies kun je best wel bedenken in wat voor richting je moet gaan, hoor. Zie linkje ^^^
Heb ik doorgelezen, maar daar staat niks over tijd berekeningen met mySQL in. Ik neem dus aan dat dat met PHP moet. Ik heb met PHP bij date() wel een berekening gevonden, maar dat is helemaal geen timestampachtig iets. Dus hoe krijg ik mySQL dan dus zover om alle records ouder dan 14 dagen automatisch te wissen :? (ik ben met timestamps een newbie)

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 18:55

me1299

$ondertitel

Misschien een beetje laat advies, maar ik liep pas tegen precies hetzelfde probleem aan, ik heb toen met data's omgezet in unixdat met mktime()

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen

Pagina: 1