Datumvergelijking met huidige tijd
ik zit met een klein probleempje. Omdat ik het verhaal niet al te lang wil maken zal ik meteen beginnen met het voorschotelen van de situatie.
Ik heb een tijd geleden een website met PHP en MySQL gemaakt. In de database werd in verschillende tabellen gebruik gemaakt van de regel DATE. De invoer moest verplicht 0000-00-00 (jaar, maand, dag) zijn, zoals ze dat in Amerika gewend zijn. Maar omdat ik verschillende aanmerkingen heb gekregen of de tijd in Nederlandse vermelding op de site zou kunnen komen, heb ik (na veel brainstormen :P) gekozen om de datum op te delen in 3 aparte regels, 'date_day', 'date_month' en 'date-year'. Waarom, zou je zeggen, nou.. omdat ik alle nieuwsberichten wel wil sorteren op jaar, maand en vervolgens dag.
Nu is er op de site ook een pagina waar evenementen op vermeld staan. Op deze pagina zijn twee kolommen aanwezig: 1 voor de evenementen in het verleden, en 1 voor evenementen die nog moeten komen. Nu zag het script er eerst zo uit:
########### OUD SCRIPT ###########
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
Include("../db/db_connect.php");
$datum = date('YYYY-MM-DD');
$queryvl = "SELECT location, nl_info, date FROM performances WHERE date <= NOW() ORDER BY date DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, date FROM performances WHERE date >= NOW() ORDER BY date DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>
Include("../db/db_connect.php");
$datum = date('YYYY-MM-DD');
$queryvl = "SELECT location, nl_info, date FROM performances WHERE date <= NOW() ORDER BY date DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, date FROM performances WHERE date >= NOW() ORDER BY date DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>
(vervolgens in <body>):....
<table border="0" width="100%" class="table1"><tr>
<td width="15%" class="td1"><b>Wanneer</b></td>
<td width="40%" class="td1"><b>Waar</b></td>
<td width="45%" class="td1"><b>Meer Info</b></td>
</tr>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
while (list($location, $nl_info, $date) = mysql_fetch_row($resulttk)){
if ($date >= $datum){
echo"<tr>";
echo "<td width='15%' valign='top' align='left'>".$date."</td>";
echo "<td width='40%' valign='top' align='left'>".$location."</td>";
echo "<td width='45%' valign='top' align='left'>";
echo(maak_tekst($nl_info));
echo "</td></tr>";
}
}
?>
while (list($location, $nl_info, $date) = mysql_fetch_row($resulttk)){
if ($date >= $datum){
echo"<tr>";
echo "<td width='15%' valign='top' align='left'>".$date."</td>";
echo "<td width='40%' valign='top' align='left'>".$location."</td>";
echo "<td width='45%' valign='top' align='left'>";
echo(maak_tekst($nl_info));
echo "</td></tr>";
}
}
?>
</table>
########### OUD SCRIPT ###########
Dit oude (perfect werkende) script heb ik dus aangepast, 'date' heeft plaats gemaakt voor de drie regels 'date_day', 'date_month' en 'date-year':
########### NIEUW SCRIPT ###########
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
Include("../db/db_connect.php");
$datum = date('YYYY-MM-DD');
$queryvl = "SELECT location, nl_info, date_day, date_month, date_year FROM performances WHERE '".$date_year."-".$date_month."-".$date_day."' <= NOW() ORDER BY date_year DESC, date_month DESC, date_day DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, date_day, date_month, date_year FROM performances WHERE '".$date_year."-".$date_month."-".$date_day."' >= NOW() ORDER BY date_year DESC, date_month DESC, date_day DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>
Include("../db/db_connect.php");
$datum = date('YYYY-MM-DD');
$queryvl = "SELECT location, nl_info, date_day, date_month, date_year FROM performances WHERE '".$date_year."-".$date_month."-".$date_day."' <= NOW() ORDER BY date_year DESC, date_month DESC, date_day DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, date_day, date_month, date_year FROM performances WHERE '".$date_year."-".$date_month."-".$date_day."' >= NOW() ORDER BY date_year DESC, date_month DESC, date_day DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>
(vervolgens in <body>):....
<table border="0" width="100%" class="table1"><tr>
<td width="15%" class="td1"><b>Wanneer</b></td>
<td width="40%" class="td1"><b>Waar</b></td>
<td width="45%" class="td1"><b>Meer Info</b></td>
</tr>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
while (list($location, $nl_info, $date_day, $date_month, $date_year) = mysql_fetch_row($resulttk)){
if ('".$date_year."-".$date_month."-".$date_day."' >= $datum){
echo"<tr>";
echo "<td width='15%' valign='top' align='left'>".$date_day."-".$date_month."-".$date_year."</td>";
echo "<td width='40%' valign='top' align='left'>".$location."</td>";
echo "<td width='45%' valign='top' align='left'>";
echo(maak_tekst($nl_info));
echo "</td></tr>";
}
}
?>
while (list($location, $nl_info, $date_day, $date_month, $date_year) = mysql_fetch_row($resulttk)){
if ('".$date_year."-".$date_month."-".$date_day."' >= $datum){
echo"<tr>";
echo "<td width='15%' valign='top' align='left'>".$date_day."-".$date_month."-".$date_year."</td>";
echo "<td width='40%' valign='top' align='left'>".$location."</td>";
echo "<td width='45%' valign='top' align='left'>";
echo(maak_tekst($nl_info));
echo "</td></tr>";
}
}
?>
</table>
########### NIEUW SCRIPT ###########
Dit script werkt niet helemaal correct. Er zit volgens mij een probleem in de vergelijking van de datum. Ik denk zelf persoonlijk dat het ".$date_year."-".$date_month."-".$date_day."' niet correct werkt.
Kun jij me misschien helpen?
Alvast bedankt!
Bart
Wil jij uit een datumkolom alleen de dag hebben, dan gebruik je DAY(datumkolomnaam), bij de maand gebruik je de functie MONTH() en voor het jaar YEAR(). Uiteraard kun je een datum ook opmaken met de MySQL-functie DATE_FORMAT().
Zie verder hoofdstuk 12.5 van de MySQL-handleiding.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
Include("../db/db_connect.php");
$datum = getdate();
$queryvl = "SELECT location, nl_info, DATE_FORMAT(date, '%d-%m-%Y') FROM performances WHERE date <= NOW() ORDER BY date DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, DATE_FORMAT(date, '%d-%m-%Y') FROM performances WHERE date >= NOW() ORDER BY date DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>
Include("../db/db_connect.php");
$datum = getdate();
$queryvl = "SELECT location, nl_info, DATE_FORMAT(date, '%d-%m-%Y') FROM performances WHERE date <= NOW() ORDER BY date DESC";
$resultvl = mysql_query($queryvl) or die (mysql_error());
$querytk = "SELECT location, nl_info, DATE_FORMAT(date, '%d-%m-%Y') FROM performances WHERE date >= NOW() ORDER BY date DESC";
$resulttk = mysql_query($querytk) or die (mysql_error());
?>