Bij wijziging tijdnotatie datum wordt 31-12-1969?
Ik selecteer de data uit een mysql database. Ik heb de code er twee keer in staan, waarbij er bij de tweede loop (na de else) een extra selectie criterium geldt omdat er ook items zijn die alleen weergegeven mogen worden nadat er ingelogd is.
Het lukt me uitstekend om alleen items weer te geven die in de toekomst liggen. Bij het maken van een de variabele voor de datum 30 dagen in de toekomst gaat iets verkeerd.
De datum moet namelijk in de notatie: Y.m.d. staan.
Het optellen van 30 dagen gaat uitstekend wanneer ik onderstaande code gebruik:
Code (php)
Dit geeft als return mooi 15 mei (vandaag is 15 april)
Gebruik ik echter de notatie:
Code (php)
Dan krijg ik als return: 1969-12-31
De code waarin ik het wil gebruiken:
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
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
<?php
$datum=(date("Y-m-d"));
$datum2=(date("Y-m-d", mktime(0, 0, 0, date("m") , date("d") +30, date("Y") )));
echo("<table border=\"1\" width=\"75\" cellspacing=\"0\">\n
<tr><td class=\"login\"><span class=\"t2\"> </span></td><td class=\"login\"><span class=\"t2\">Agenda</span></td></tr>\n");
if (isset($_SESSION["userid"]))
{
$agendaint=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' ORDER BY item_date");
$agendaresultint = mysql_query($agendaint) or die ("FOUT : " . mysql_error());
while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
mysql_fetch_row($agendaresultint))
{
echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
}
}
else
{
$agendaext=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' AND item_display='2' ORDER BY item_date");
$agendaresultext = mysql_query($agendaext) or die ("FOUT : " . mysql_error());
while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
mysql_fetch_row($agendaresultext))
{
echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
}
}
echo("</table>\n");
?>
$datum=(date("Y-m-d"));
$datum2=(date("Y-m-d", mktime(0, 0, 0, date("m") , date("d") +30, date("Y") )));
echo("<table border=\"1\" width=\"75\" cellspacing=\"0\">\n
<tr><td class=\"login\"><span class=\"t2\"> </span></td><td class=\"login\"><span class=\"t2\">Agenda</span></td></tr>\n");
if (isset($_SESSION["userid"]))
{
$agendaint=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' ORDER BY item_date");
$agendaresultint = mysql_query($agendaint) or die ("FOUT : " . mysql_error());
while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
mysql_fetch_row($agendaresultint))
{
echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
}
}
else
{
$agendaext=("SELECT * FROM pddb_agenda WHERE item_date >= '".$datum."' AND item_display='2' ORDER BY item_date");
$agendaresultext = mysql_query($agendaext) or die ("FOUT : " . mysql_error());
while (list($item_id, $item_date, $item_omschr, $item_link, $item_lid_id, $item_display) =
mysql_fetch_row($agendaresultext))
{
echo("<tr><td><span class=\"t2\">$item_date</span></td><td class=\"login\"><span class=\"t2\">$item_omschr</span></td></tr>\n");
}
}
echo("</table>\n");
?>
Variabele $datum2 moet dan nog als extra argument worden toegevoegd aan beide selectiequery's
Iemand een idee hoe ik die 30 dagen er toch in de notatie Y.m.d. bij op kan tellen?
Ik wil niet met timestamps gaan werken omdat ik weet dat dat niet nodig is in dit geval.
Ik heb de hanleiding van SQL al grondig bestudeert. Heb het ook al geprobeert met de SQL functies CURDATE en CURRENT_DATE.
Gewijzigd op 15/04/2004 14:38:00 door Willem Jan
Quote:
Jah... Dit kan dan ook helemaal niet hè? De eerste keer gebruik je de functie mktime() goed en de andere keer niet...
http://nl3.php.net/mktime zegt:
Quote:
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]])
Dat betekend dat het zo zal moeten:
Code (php)
Elwin
Mss is mij het ontgaan, of mss staat het er niet maar waarom moet eerst het jaar?
Quote:
Mss is mij het ontgaan, of mss staat het er niet maar waarom moet eerst het jaar?
Het jaar moet juist als laatste... (in de mktime() functie).
Elwin
Het was eigelijk een reactie op het allereerste bericht :), maar jij was eerder ... (2 minuten? Deed ik er zolang over? :P)
Elwin
En programmeren gaat me goed af (denk ik)
Mijn fout dus..
iig bedankt!
Nog ff een antwoord waarvoor ik die datumnotatie nodig had:
In de MySQL database wordt de datum ook volgens de Y.m.d. notatie opgeslagen. Om te vergelijken heb ik dan toch dezelfde notatie nodig?
Of kan ik het in de database ook volgens de d.m.Y. notatie opslaan?
Das natuurlijk op zich wel gemakkelijker, want ik moet het bij het naar het scherm schrijven toch omzetten naar de nederlandse notatie.