[PHP/MySQL] Datetime omzetten in NL formaat

Pagina: 1
Acties:
  • 254 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen, ik kom er ff niet uit en zou wel wat hulp kunnen gebruiken.

Ik heb een gastenboek gemaakt, hieronder de code:

PHP:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
include("../Script/connect.inc.php");

// Aantal berichten per pagina

$count = 5;

// hoogste id ophalen

$max_id_query = mysql_query("SELECT max(guestbook_ID) FROM guestbook");
$max_id = mysql_fetch_array($max_id_query);

// $count aantal berichten ophalen uit de database, nieuwste eerst

if(!isset($_GET['pos'])){
  $guestbook_query = mysql_query("SELECT * FROM guestbook ORDER BY guestbook_ID DESC LIMIT ".$count);
}else{
  $guestbook_query = mysql_query("SELECT * FROM guestbook WHERE guestbook_ID < ".($_GET['pos']+1)." ORDER BY guestbook_ID DESC LIMIT ".$count);
}

// Vorige link

if(!isset($_GET['pos'])){
  $new_pos_next = $max_id[0] - $count;
}else{
  $new_pos_next = $_GET['pos'] - $count;
}
if($new_pos_next >= 1){
  $link_next = "<a href=guestbook_adv.php?pos=".$new_pos_next.">volgende >></a>";
}else{
  $link_next = "volgende >>";
}

if(!isset($_GET['pos'])){
  $new_pos_prev = $max_id[0] + $count;
}else{
  $new_pos_prev = $_GET['pos'] + $count;
}
if($new_pos_prev-$count < $max_id[0]){
  $link_prev = "<a href=guestbook_adv.php?pos=".$new_pos_prev."><< vorige</a>";
}else{
  $link_prev = "<< vorige";
}

// Hier de items uit de database lezen en weergeven
while($guestbook_data = mysql_fetch_array($guestbook_query))
  {
?>
<link href="../Script/style.css" rel="stylesheet" type="text/css">
<table width="400" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td width="250" height="25" class="news_tekst"><?php echo $guestbook_data['guestbook_name'] ?></td>
        <td width="150" height="25" class="news_plaats" align="right"><?php echo $guestbook_data['guestbook_datetime'] ?></td>
  </tr>
  <tr>
    <td colspan="2" class="news_main"><?php echo $guestbook_data['guestbook_text'] ?></td>
  </tr>
  <tr>
    <td colspan="2"><hr width='400' size='1' noshade></td>
  </tr>
</table>
<?php
}
?>
<table width="400" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td class="login_hyperlink">
          <?php echo $link_prev . " " . $link_next ?>
        </td>
  </tr>
</table>


Nu is het probleem dat de datum in een 0000-00-00 00:00:00 volgorde wordt weergegeven, dat is natuurlijk ook logisch omdat het zo uit de db komt. In de db heb ik het veld guestbook_datetime als type 'datetime' meegegeven. Dit omdat de berichten op datum (en tijd) gesorteerd moeten worden. Werkt allemaal prima maar ik zou graag het formaat 00-00-0000 00:00:00 willen toepassen.

Na een tijdje zoeken en proberen begrijp ik het volgende, ik zou een query kunnen toepassen waarin ik date_format gebruik. Helaas heb ik geen idee hoe dat dan precies toe te passen in bovenstaande code. Verder kreeg ik de volgende code van een maat van me:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function GeefDieGodVerdommeseDatumGoedWeer($sqldatum) {
    $positie = strpos($sqldatum, "-");
    $jaar = substr($sqldatum, 0, $pos);
    
    $restdatum = substr($sqldatum, $pos+1);
    $positie = strpos($restdatum, "-");
    $maand = substr($restdatum, 0, $pos);
    
    $dag = substr($restdatum, $pos+1);
    
    $jouwdatum = $dag . "-" . $maand . "-" . $jaar;
}


Hiermee zou het ook moeten kunnen, helaas begrijp ik ook niet goed hoe ik dit werkend zou kunnen maken.

Zou iemand me ff kunnen helpen?
Ik ben zelf voorstander voor de query oplossing...

[ Voor 31% gewijzigd door NMe op 15-11-2005 16:43 ]


Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

SELECT DATE_FORMAT(COALESCE(guestbook_datetime, CURRENT_DATE), '%d-%m-%Y') AS datum FROM guestbook

bij %d-%m-%Y kan je zelf de gewenste teruggave opgeven

[ Voor 36% gewijzigd door dip op 15-11-2005 14:18 ]

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

PHP:
1
2
setlocale(LC_ALL, nl_NL.ISO8859-1);
echo strftime("%m %Y", $datum);


Even uit mn hoofd . strftime voor hoe je deze wilt inelkaar zetten.

Ik zie dat die setlocale niet eens nodig is. Je wilt alleen maar de nummertjes omdraaien :P

[ Voor 61% gewijzigd door disjfa op 15-11-2005 14:19 ]

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik voel me noob :)

Krijg die kut query niet werkend, waar en hoe zou ik die moeten inbouwen?

Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

aan de hand van deze site moet het toch lukken :)

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 15 november 2005 @ 15:05:
Ik voel me noob :)

Krijg die kut query niet werkend, waar en hoe zou ik die moeten inbouwen?
Als je eerst eens zegt wat je al geprobeerd hebt komen we verder. ;)

Trouwens, als je code post, wil je dat dan tussen [code] of [code=taal] tags doen? Dit is gewoon niet te lezen. Ik zal je startpost even voor je aanpassen, doe je het de volgende keer zelf?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

dip schreef op dinsdag 15 november 2005 @ 14:17:
SELECT DATE_FORMAT(COALESCE(guestbook_datetime, CURRENT_DATE), '%d-%m-%Y') AS datum FROM guestbook

bij %d-%m-%Y kan je zelf de gewenste teruggave opgeven
Je ziet dat Dip er een alias achterzet waarmee hij de kolom als het ware 'hernoemt' naar 'datum'?
Dan moet je het in je PHP code ook zo aanroepen, en niet met 'guestbook_datetime'.

Als dit niet de oorzaak is, weet ik het ook zo snel niet. Dan moet je even aangeven wat er echt mis is. :P

edit:
@dipje: Ik zie overigens het nut niet van die coalesce :)

[ Voor 11% gewijzigd door JKVA op 15-11-2005 19:26 ]

Fat Pizza's pizza, they are big and they are cheezy


Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

offtopic:
stfu @ JK :)
kheb dit uit jouw werk geknipt :-)

maar je hebt wel gelijk. COALESCE vervangt de return waarde door een bepaalde variabele wanneer de huidige return waarde niets teruggeeft, en dat is in dit geval niet relevant.
Dus schrijven we het maar als volgt:
SQL:
1
SELECT DATE_FORMAT(guestbook_datetime, '%d-%m-%Y') AS datum FROM guestbook

[ Voor 3% gewijzigd door dip op 15-11-2005 19:46 ]

It's scientifically known, that base improves the tase of cheezes!


Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
$admin = 1;

$count = 5;

$test = mysql_query("SELECT DATE_FORMAT(guestbook_datetime, '%d-%m-%Y') AS datum FROM guestbook");
$test2 = mysql_fetch_array($test);

if ($admin == 1)
{
   echo $test2
}



Ik heb dit geprobeerd, ik krijg echter de waarde 'array' dan van $admin.

Het word tijd voor een basis cursus php :)

[ Voor 16% gewijzigd door Verwijderd op 17-11-2005 18:03 ]


Acties:
  • 0 Henk 'm!

  • Observer
  • Registratie: April 2001
  • Laatst online: 16:24
Verwijderd schreef op donderdag 17 november 2005 @ 18:02:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$admin = 1;

$count = 5;

$test = mysql_query("SELECT DATE_FORMAT(guestbook_datetime, '%d-%m-%Y') AS datum FROM guestbook");
$test2 = mysql_fetch_array($test);

if ($admin == 1)
{
   echo $test2
}



Ik heb dit geprobeerd, ik krijg echter de waarde 'array' dan van $admin.

Het word tijd voor een basis cursus php :)
Allicht, $test2 is het resultaat van een mysql_fetch_ARRAY(). Je kan de datum nu ophalen met $test2['datum'].
Basiscursusje is idd nooit verkeerd...

There are 10 kinds of people in the world: those that understand binary and those that don't


Acties:
  • 0 Henk 'm!

  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Misschien ben je met deze 2 functietjes nog wel iets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* mysqldate2phpdate - MySQL Date to PHP Date
*/
function mysqldate2phpdate($pDate) {
  $year = substr($pDate, 0, 4);
  $month = substr($pDate, 5, 2);
  $day = substr($pDate, 8, 2);
  $hour = substr($pDate, 11, 2);
  $min = substr($pDate, 14, 2);
  $sec = substr($pDate, 17, 2);
  return mktime($hour, $min, $sec, $month, $day, $year);
}

/**
* phpdate2mysqldate - PHP Date to MySQL Date
*/
function phpdate2mysqldate($pDate) {
  return date("Y-m-d H:i:s", $pDate);
}

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

maartenba schreef op vrijdag 18 november 2005 @ 14:51:
Misschien ben je met deze 2 functietjes nog wel iets:
Waarom zou je extra functies maken als er al tig php eigen data conversie functies zijn.

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

disjfa schreef op vrijdag 18 november 2005 @ 14:52:
Waarom zou je extra functies maken als er al tig php eigen data conversie functies zijn.
Sowieso kun je de inhoud van die eerste functie door één regel vervangen:
PHP:
1
return strtotime($pDate);

Daarnaast klopt de functienaam niet met wat de functie doet (hij converteert niet alleen de datum, maar ook de tijd). Sterker nog, beide functies gaan hele gekke dingen doen als je ze alleen een datum voert. 8)7
Verwijderd schreef op donderdag 17 november 2005 @ 18:02:
PHP:
1
2
3
4
5
6
7
8
9
10
11
$admin = 1;

$count = 5;

$test = mysql_query("SELECT DATE_FORMAT(guestbook_datetime, '%d-%m-%Y') AS datum FROM guestbook");
$test2 = mysql_fetch_array($test);

if ($admin == 1)
{
   echo $test2
}



Ik heb dit geprobeerd, ik krijg echter de waarde 'array' dan van $admin.

Het word tijd voor een basis cursus php :)
Hoe kan het dat je een compleet gastenboek heb geschreven dat werkt, en je toch nog zo'n beginnersfout maakt als deze? Je doet het in de rest van je gastenboek toch ook goed? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
Ik gebruik zelf vaak deze constructie, zodat ik de losse elementen van de datum beschikbaar heb (inmiddels mooie display functie omheen gebouwd).

$mysqldate is de datum zoals deze uit de DB komt.

PHP:
1
list($year,$month,$day,$hour,$minute,$second) = sscanf($mysqldate,"%4s-%2s-%2s %2s:%2s:%2s");


nevermind...zit met bier @ kantoor en had niet goed gelezen. Wat je eventueel nog kunt gebruiken voor je query is de MySQL TIMESTAMP() functie...zodat je een nette unix timestamp terugkrijgt, hiermee kun je vervolgens alles wat je wilt.

[ Voor 29% gewijzigd door MissingDog op 18-11-2005 18:55 ]


Acties:
  • 0 Henk 'm!

  • DemonTPx
  • Registratie: December 2002
  • Laatst online: 09-04 10:49
Verwijderd schreef op dinsdag 15 november 2005 @ 14:12:
*KNIP*
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function GeefDieGodVerdommeseDatumGoedWeer($sqldatum) {
    $positie = strpos($sqldatum, "-");
    $jaar = substr($sqldatum, 0, $pos);
    
    $restdatum = substr($sqldatum, $pos+1);
    $positie = strpos($restdatum, "-");
    $maand = substr($restdatum, 0, $pos);
    
    $dag = substr($restdatum, $pos+1);
    
    $jouwdatum = $dag . "-" . $maand . "-" . $jaar;
}

*KNIP*
Is het iemand opgevallen dat er een $positie gemaakt wordt. En dat er een $pos gebruikt wordt?! :o

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
NCIS schreef op vrijdag 18 november 2005 @ 11:59:
[...]


Allicht, $test2 is het resultaat van een mysql_fetch_ARRAY(). Je kan de datum nu ophalen met $test2['datum'].
Basiscursusje is idd nooit verkeerd...
Het is inderdaad triest hoe simpel, ik moet af en toe wat meer rust nemen... :)

Bedankt!

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nee, juist wat minder rust nemen en wat meer zelf opzoeken. ;) Dit staat allemaal ook gewoon in de manual. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op vrijdag 18 november 2005 @ 15:00:
Hoe kan het dat je een compleet gastenboek heb geschreven dat werkt, en je toch nog zo'n beginnersfout maakt als deze? Je doet het in de rest van je gastenboek toch ook goed? :?
Ik ben nogal wazig en chaotisch in m'n hoofd zo nu en dan. Op het ene moment kun je een gastenboek maken en een moment later zie je simpele oplossingen zoals hierboven niet meer.

Ik ben blij dat jullie tijd en moeite in de oplossing (voor mij) hebben willen steken..

Bedankt!

(slotje kan erop)..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-NMe- schreef op zaterdag 19 november 2005 @ 12:00:
Nee, juist wat minder rust nemen en wat meer zelf opzoeken. ;) Dit staat allemaal ook gewoon in de manual. :)
De shrink wil toch dat ik wat meer rust neem.. ;)
Pagina: 1