[PHP&MYSQL] Datum notatie in de DB

Pagina: 1
Acties:

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 10-09 07:10

Snow_King

Konijn is stoer!

Topicstarter
Hallo,

Ik ben nu een nieuws script aan het schrijven.

Nu moeten mensen dus ook het nieuws van gisteren kunnen lezen.
$res = mysql_query("SELECT * FROM news WHERE date=DATE_SUB(now(),INTERVAL 1 DAY)");
Daarmee select ik dus de juiste datum.

Eerst had ik het date field gewoon als 'text' maar die moet dus waarschijnlijk als 'date' anders werkt die functie niet.

Nu heb ik de kolom date als een type 'date' gemaakt, maar mysql maakt ervan 0000-00-00 terwijl ik werk met 00-00-0000 nu kan ik wel met phpmyadmin de default waarde zetten op 00-00-0000 maar dan maakt mysql er weer van 2000-00-00.

Hoe zet ik nu in de mysql de datum notatie op 00-00-0000?

Ik heb hier al een beetje gekeken maar vond daar ook niet echt wat ik zocht

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

drm

f0pc0dert

Je moet de datum in je query formatten naar een string, niet in je tabel.

Dus maak van je datumveld een TIMESTAMP, en lees de datum niet (as in: nooit) uit met SELECT *, maar met
SELECT DATE_FORMAT(date,'%d-%m-%Y') as datum

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


  • Snow_King
  • Registratie: April 2001
  • Laatst online: 10-09 07:10

Snow_King

Konijn is stoer!

Topicstarter
Op zaterdag 23 maart 2002 17:26 schreef drm het volgende:
Je moet de datum in je query formatten naar een string, niet in je tabel.

Dus maak van je datumveld een TIMESTAMP, en lees de datum niet (as in: nooit) uit met SELECT *, maar met
SELECT DATE_FORMAT(date,'%d-%m-%Y') as datum
dat moet toch anders kunnen?

[topic=61561/1/25] daar vond ik de mysql_query die ik gebruik

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

DATETIME + [b] SYSDATE() [b] + Between

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Grum
  • Registratie: Juni 2001
  • Niet online
rustig dusty .. zelf nadenken is uit de mode :+

  • Snow_King
  • Registratie: April 2001
  • Laatst online: 10-09 07:10

Snow_King

Konijn is stoer!

Topicstarter
Op zaterdag 23 maart 2002 18:31 schreef Grum het volgende:
rustig dusty .. zelf nadenken is uit de mode :+
ik denk ook zelf na, maar ik kom er gewoon niet uit.

Ik heb al van alles gedaan

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Datum is MySql en PHP werken fundamenteel anders :
In MySql wordt een datum altijd opgeslagen als :
yyymmddhhiiss = TIMESTAMP
yyymmdd = DATE
hhiiss = TIME
Waarom wordt dit gedaan, misschien omdat dit makkelijker te lezen is dan x senconden na 1 januari 1970.
PHP slaat datums op als secondens na 1 januari 1970 in een ik mag hopen in een unsigned long. Het gebruik van MySql en PHP datum door elkaar kan dus voor problemen zorgen. Je moet er dus voor zorgen dat je je MySql Date ombouwt naar een PHP date en visa versa.
De volgende functie bouwt en MySql Timestamp om naar een PHP date
PHP:
1
<?function mysqlDateToPhpDate($mysqTimestamp){     $date = Array();    $date['year'] =  substr ($mysqTimestamp,0,4);    $date['month'] =  substr ($mysqTimestamp,4,2);    $date['day'] =  substr ($mysqTimestamp,6,2);    $date['hour'] =  substr ($mysqTimestamp,8,2);    $date['minute'] =  substr ($mysqTimestamp,10,2);    $date['second'] =  substr ($mysqTimestamp,12,2);    $timestamp =  mktime ($date['hour'], $date['minute'], $date['second'], $date['month'], $date['day'], $date['year'] );        return($timestamp);}?>

Dit werkt voor MySql Timestamp en Date (als je er 000000 achter plakt) Tevens kun je met deze functie controleren of je een goede timestamp het gebruikt.

Voor het ombouwen van een PHP Date naar een mysql Timestamp gebruik je :
PHP:
1
<?$dateStr = date ("Ymdhis",$phpDate);?>

Dus was doe je :
Je haalt de Date uit de database maakt er een PHP date van met de functie en haalt hem door date($format,$phpDate)
Date accepteerde o.a. de volgende formats :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * a - "am" of "pm" 
 * A - "AM" of "PM" 
 * B - Swatch Internet time 
 * d - dag van de maand, 2 cijfers met nullen aan het begin; dus "01" tot "31" 
 * D - dag van de week, textueel, 3 letters; dus "Fri" 
 * F - maand, textueel, lang; dus "January" 
 * g - uur, 12-uur format zonder nullen aan het begin; dus "1" tot "12" 
 * G - hour, 24-uur format zonder nullen aan het begin; dus "0" tot "23" 
 * h - uur, 12-uur format; dus "01" to "12" 
 * H - hour, 24-uur format; dus "00" tot "23" 
 * i - minuten; dus "00" tot "59" 
 * I (hoofdletter i) - "1" wanneer Daylight Savings Time, anders "0". 
 * j - dag van de maand zonder nullen aan het begin; dus "1" tot "31" 
 * l (kleine letter 'L') - dag van de week, textueel, lang; dus "Friday" 
 * L - boolean voor wanneer het een schrikkeljaar is; dus "0" of "1" 
 * m - maand; dus "01" tot "12" 
 * M - maand, textueel, 3 letters; dus "Jan" 
 * n - maand zonder nul aan het begin; dus "1" tot "12" 
 * r - RFC 822 geformatteerde date; dus "Thu, 21 Dec 2000 16:01:07 +0200" 
 * s - seconden; dus "00" tot "59" 
 * S - Engels ordinale suffix, textueel, 2 karakters; dus "th", "nd" 
 * t - aantal dagen in een gegeven maand; dus "28" tot "31" 
 * T - Timezone setting van deze machine; dus "MDT" 
 * U - seconden sinds epoch 
 * w - dag van de week, numeriek, dus "0" (Zondag) tot "6" (Zaterdag) 
 * Y - jaar, 4 cijfers; dus "1999" 
 * y - jaar, 2 cijfers; dus "99" 
 * z - dag van het jaar; dus "0" tot "365" 
 * Z - timezone offset in seconden (dus "-43200" tot "43200"). De offset voor timezones ten westen van UTC is altijd negatief, en voor het oosten van UTC altijd positief. 
 */

Meer info op http://www.php.net zoeken op date

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Op zondag 24 maart 2002 18:12 schreef vgouween leuke functie om mysql datum naar php om te zetten
hmm.. ik gebruik altijd SELECT UNIX_TIMESTAMP(date) as Datum FROM tabel. Werkt imho iets overzichtelijker :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


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

drm

f0pc0dert

Snow_King:
dat moet toch anders kunnen?

[topic=61561/1/25] daar vond ik de mysql_query die ik gebruik
Ehm, jah, dat kan inderdaad anders. Maar waarom dat moet, mag jij mij uitleggen. Dat werkt toch prima?

vgouw>
Je gegevens formatten in PHP terwijl dat in de query al kan is vies.

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


  • eborn
  • Registratie: April 2000
  • Laatst online: 08-09 12:50
Ik gebruik altijd een veld time: int(10) en daar zet ik via UNIX_TIMESTAMP() (of time() in PHP) een waarde in. Werkt prima. En dan haal ik het er òf met DATE_FORMAT() in de SELECT uit. Of ik haal gewoon het veld op en gooi dat door PHP's strftime.

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Op maandag 25 maart 2002 08:17 schreef drm het volgende:
Je gegevens formatten in PHP terwijl dat in de query al kan is vies.
Op zondag 24 maart 2002 21:04 schreef Janoz het volgende:
hmm.. ik gebruik altijd SELECT UNIX_TIMESTAMP(date) as Datum FROM tabel. Werkt imho iets overzichtelijker :)
Is dat dan ook vies?

Rustacean


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 09-09 20:58

Janoz

Moderator Devschuur®

!litemod

Op maandag 25 maart 2002 10:06 schreef Manuzhai het volgende:

[..]


[..]

Is dat dan ook vies?
Dat ligt eraan. Wil je binnen php nog met de datum rekenen, dan is een timstamp het makkelijkst. Waneer je een vaste weergave nodig hebt kun je dit ook al rechtstreeks in je query opvragen. Ik gebruik echter vaak een constante formaat string. Hiermee wordt dan over de hele site de datum op dezelfde manier weergegeven. Deze geef ik dan mee als argument bij die php functie. Ik hoef dan maar op 1 plek iets te weizigen als ik over de hele site een andere datum notatie nodig heb.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


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

drm

f0pc0dert

precies, als je het verder in PHP nog nodig hebt dan is het natuurlijk een ander verhaal, maar over het algemeen kun je je datum prima in je query formatten.

En wat betreft de datumnotatie over je gehele site veranderen zou je in PHP gewoon een constante kunnen includen waarin je je date-format zet:
code:
1
2
3
4
5
6
$MYSQL_DATE_FORMAT = "%d-%m-%Y";
// ...
$query = "
  SELECT 
     DATE_FORMAT('$MYSQL_DATE_FORMAT',date) as date
  ...";

Maar dat is natuurlijk ook maar een keuze... Ik ben iig een voorstander van zoveel mogelijk aan formatten van data binnen je query houden.

just my C0,02 ofcourse :)

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


  • vinnux
  • Registratie: Maart 2001
  • Niet online
Op maandag 25 maart 2002 08:17 schreef drm het volgende:
[..]

vgouw>
Je gegevens formatten in PHP terwijl dat in de query al kan is vies.
Dat klopt, je moet zo veel mogelijk in je querie proberen te doen. Functie was van origine ok alleen maat bedoelt voor het valideren van een datum. Maar het geeft wel duidelijk aan hoe de structuur van een MySql date is, ook erg handig bij het converteren van handmatige invoer. Want ja, de seconden naar 1 jan 1970:)

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

drm

f0pc0dert

vgouw:
Dat klopt, je moet zo veel mogelijk in je querie proberen te doen. Functie was van origine ok alleen maat bedoelt voor het valideren van een datum. Maar het geeft wel duidelijk aan hoe de structuur van een MySql date is, ook erg handig bij het converteren van handmatige invoer. Want ja, de seconden naar 1 jan 1970:)
Mwah, opzich is het niet echt interessant om te weten, want MySQL interpreteert prima "gewone" UK-style datum-notaties, wanneer het veld een datum of tijd type van welk soort dan ook is.
MySQL Manual:

You can specify DATETIME, DATE, and TIMESTAMP values using any of a common set of formats:
[...]
  • As a string in either 'YYYY-MM-DD HH:MM:SS' or 'YY-MM-DD HH:MM:SS' format. A ``relaxed'' syntax is allowed--any punctuation character may be used as the delimiter between date parts or time parts. For example, '98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45', and '98@12@31 11^30^45' are equivalent.
  • As a string in either 'YYYY-MM-DD' or 'YY-MM-DD' format. A ``relaxed'' syntax is allowed here, too. For example, '98-12-31', '98.12.31', '98/12/31', and '98@12@31' are equivalent.
    [...]

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

Pagina: 1