rekenen met datetime
In mijn database heb ik met datetime dat tijd toegevoegd wanneer een aanmelding is geplaatst. Nu wil ik uitrekenen hoelang geleden dat is.
Nu heb ik het volgende alleen werkt dit niet:
SELECT voornaam, CURRENT_DATE(), tijd, DATEDIFF(CURRENT_DATE(), tijd) AS verschil FROM klant;
Nu heb ik het volgende alleen werkt dit niet:
SELECT voornaam, CURRENT_DATE(), tijd, DATEDIFF(CURRENT_DATE(), tijd) AS verschil FROM klant;
in seconden:
select voornaam, tijd, unix_timestamp(now())-unix_timestamp(tijd) as verschil from klant;
select voornaam, tijd, unix_timestamp(now())-unix_timestamp(tijd) as verschil from klant;
Tja, 'werkt niet' blijft toch een vage bedoening. Geen mens die weet wat er fout gaat, verkeerde uitkomsten of errors, en dat is toch wel zo handig.
Het is mij overigens niet duidelijk waarom je CURRENT_DATE() in de SELECT hebt staan en dan ook nog zonder ALIAS. Dat is lastig werken in php.
De functie DATEDIFF() ziet er goed uit, maar je moet wel bedenken dat je nu met datums bezig bent en niet met tijden (uren, minuten en seconden) wat je met TIMEDIFF() kunt berekenen. De vraag is dus wat je nu precies wilt berekenen en wat er fout gaat.
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Edit: @Rudi: Die timestamps heb je niet nodig, TIMEDIFF() doet de truc ook, maar dan eenvoudiger. Althans, zo denk ik er over... ;)
Het is mij overigens niet duidelijk waarom je CURRENT_DATE() in de SELECT hebt staan en dan ook nog zonder ALIAS. Dat is lastig werken in php.
De functie DATEDIFF() ziet er goed uit, maar je moet wel bedenken dat je nu met datums bezig bent en niet met tijden (uren, minuten en seconden) wat je met TIMEDIFF() kunt berekenen. De vraag is dus wat je nu precies wilt berekenen en wat er fout gaat.
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Edit: @Rudi: Die timestamps heb je niet nodig, TIMEDIFF() doet de truc ook, maar dan eenvoudiger. Althans, zo denk ik er over... ;)
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Wil graag het verschil weten tussen nu en de ingevoerde data/tijd. Als het kleiner is als 30 min dan moet er iets mee gaan gebeuren.
SELECT naam, tijd, TIMEDIFF( TIMEDIFF( NOW( ) , tijd ) ) AS minuten
FROM klanten
MySQL retourneerde:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( TIMEDIFF( NOW( ) , tijd ) ) AS uren
FROM klanten
LIMIT 1' a
SELECT naam, tijd, TIMEDIFF( TIMEDIFF( NOW( ) , tijd ) ) AS minuten
FROM klanten
MySQL retourneerde:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '( TIMEDIFF( NOW( ) , tijd ) ) AS uren
FROM klanten
LIMIT 1' a
Vanwaar de functie TIMEDIFF() binnen de functie TIMEDIFF() ? Daar gaat iets helemaal fout.
En wanneer je alleen de uren wilt hebben, dan kun je
MINUTE(TIMEDIFF( NOW( ) , tijd )) AS minuten
gebruiken.
En wanneer je alleen de uren wilt hebben, dan kun je
MINUTE(TIMEDIFF( NOW( ) , tijd )) AS minuten
gebruiken.
Er ging idd iets een beetje mis. Had de code nu al zoals jij hem hebt. Alleen nog zonder resultaat helaas.
SELECT naam, tijd, MINUTE(TIMEDIFF(NOW( ),tijd)) AS minuten
FROM klanten
SELECT naam, tijd, MINUTE(TIMEDIFF(NOW( ),tijd)) AS minuten
FROM klanten
Met de query is niets mis, tenzij jouw kolomnamen niet goed zijn, daar kan het dus niet aan liggen. Controleer jij wel of de query is gelukt en hoeveel records er zijn geselecteerd?
Opmerking: De functie MINUTE() kan prima werk verrichten, maar lijkt mij hier niet op zijn plaats. TIMEDIFF() geeft een antwoord in het formaat hh:mm:ss en om daar nu alleen de minuten van te nemen, het lijkt mij wat vreemd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$query = ""; // jouw SQL
$result = mysql_query($query);
if(!$result){
echo 'Query mislukt vanwege: '.mysql_error();
}
else {
$rows = mysql_num_rows($result);
echo 'er zijn '.$rows.' geselecteerd.'
while($row = mysql_fetch_assoc($result)){
echo $row['minuten'];
}
}
?>
$query = ""; // jouw SQL
$result = mysql_query($query);
if(!$result){
echo 'Query mislukt vanwege: '.mysql_error();
}
else {
$rows = mysql_num_rows($result);
echo 'er zijn '.$rows.' geselecteerd.'
while($row = mysql_fetch_assoc($result)){
echo $row['minuten'];
}
}
?>
Opmerking: De functie MINUTE() kan prima werk verrichten, maar lijkt mij hier niet op zijn plaats. TIMEDIFF() geeft een antwoord in het formaat hh:mm:ss en om daar nu alleen de minuten van te nemen, het lijkt mij wat vreemd.




