Avatar billede jens12 Nybegynder
28. juni 2006 - 11:45 Der er 14 kommentarer og
1 løsning

Dato problem

Hej
jeg har et community, hvor jeg ligger en dato ind i mysql databasse når en bruger oprettet sig.Datoen bliver lagt ind sån her : 30/01-2006 Og nu kommer jeg til spørgsmålet : Hvordan får jeg lavet sån at den siger xxx antal dage siden ?
Avatar billede erikjacobsen Ekspert
28. juni 2006 - 12:24 #1
Du bør starte med at lægge datoen i et felt at typen DATE, og dermed på formen 2006-01-30
Så kan man lave sjove ting med den :)
Avatar billede gizmo-gizmo Nybegynder
28. juni 2006 - 12:28 #2
Ja, brug date (eller datetime), så kunne du f.eks. udvælge alle poster de seneste 3 dage på følgende måde:

SELECT * FROM mintabel WHERE datofelt > ADDDATE(now(), INTERVAL -3 DAY)
Avatar billede jens12 Nybegynder
28. juni 2006 - 13:33 #3
Hvordan skal jeg så sætte det ind?
Med NOW() ?
Avatar billede gizmo-gizmo Nybegynder
28. juni 2006 - 13:44 #4
Ja altså... hvis du vil indsætte dags dato (når felttypen f.eks. hedder date, datetime eller timestamp) så kan du:
INSERT INTO mintabel (datofelt) VALUES (NOW())
Avatar billede jens12 Nybegynder
28. juni 2006 - 17:03 #5
Okay nu har jeg lavet oprettet feltet fra varchar til et date..Hvordan får jeg den så til at vise xxx antal dage siden ?
Altså oprettet - idag = xxx antal dage for brugeren jens?
Avatar billede gizmo-gizmo Nybegynder
28. juni 2006 - 23:30 #6
Hvis det er en nyere version af MySQL du bruger, så kan du gøre det let på denne måde:

SELECT *, DATEDIFF(NOW(), oprettet) AS antaldage FROM mintabel WHERE bruger='jens'

DATEDIFF giver dig direkte antal dage mellem det første argument (dags dato) og det andet argument (dit felt der hedder oprettet).

Hvis det ikke virker kan du benytte den lidt alternative måde jeg lige har fundet på:

SELECT *, FLOOR((UNIX_TIMESTAMP()-UNIX_TIMESTAMP(oprettet))/86400) AS antaldage FROM mintabel WHERE bruger='jens'


(hvis der er en der kender en lettere måde, så hører jeg det gerne :)
Avatar billede jens12 Nybegynder
29. juni 2006 - 11:58 #7
Måske et dumt spørgsmål,Men hvordan får jeg udskrevet "xxx antal dage siden" jeg det ud?
Avatar billede gizmo-gizmo Nybegynder
29. juni 2006 - 12:40 #8
:-)  Læg mærke til at der står "AS antaldage"
Det gør at du kan hive det ud med f.eks.:

$q = mysql_query("SELECT *, DATEDIFF(NOW(), oprettet) AS antaldage FROM mintabel WHERE bruger='jens'");

$r = mysql_fetch_array($q);
echo $r['antaldage']
Avatar billede jens12 Nybegynder
29. juni 2006 - 13:26 #9
Hej igen
Nu har jeg prøvet det du skrev og resultatet blev :
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 '(NOW(), oprettet) AS antaldage FROM login WHERE brugernavn = 'j

<?
session_start();
include("connect.php");
$u = mysql_query("SELECT *, DATEDIFF(NOW(), oprettet) AS antaldage FROM login WHERE brugernavn = 'jens'") or die(mysql_error());

$r = mysql_fetch_array($u);
echo "$r[antaldage]";
?>
Avatar billede jens12 Nybegynder
29. juni 2006 - 13:28 #10
Et ekstra spørgsmål Hvordan ligger jeg datoerne ind som danske datoer?
Avatar billede gizmo-gizmo Nybegynder
29. juni 2006 - 13:44 #11
Datoerne skal ligge i det format i databasen som de ligger i. Det er først når du trækker ud fra databasen og du skal konvertere til f.eks. dansk format. Man kunne f.eks.:

SELECT *, DATE_FORMAT(oprettet, '%d-%m-%y') AS oprettet FROM login WHERE brugernavn='Jens'

Se evt. mere på: http://phpartikler.dk/artikler/mysqldato.php

At du får den fejl kunne godt tyde på at du ikke kører den nyeste version af mysql der ikke kender datediff(). Prøv så evt. med:

<?php
session_start();
include("connect.php");
$u = mysql_query("SELECT *, FLOOR((UNIX_TIMESTAMP()-UNIX_TIMESTAMP(oprettet))/86400) AS antaldage FROM login WHERE bruger='jens'") or die(mysql_error());

$r = mysql_fetch_array($u);
echo "$r[antaldage]";
?>
Avatar billede jens12 Nybegynder
01. juli 2006 - 16:07 #12
Tak,for hjælpen Gizmo-gizmo,Jeg har givet dig lidt ekstra point for din store hjælp:D
Avatar billede jens12 Nybegynder
02. juli 2006 - 19:29 #13
Undskyld jeg spørger..Men kunne du evt skrive en kode som tjekker at hvis en bruger nu er oprettet idag så skriver den Oprettet idag?
Avatar billede gizmo-gizmo Nybegynder
02. juli 2006 - 20:49 #14
Muligvis:

SELECT * FROM login WHERE oprettet > ADDDATE(NOW(), INTERVAL -1 DAY) AND bruger='Jens' LIMIT 1

Så henter den en række hvor feltet 'oprettet' er større end nu (minus 1 dag), og hvor bruger er Jens.
Avatar billede gizmo-gizmo Nybegynder
02. juli 2006 - 20:50 #15
Hvis den returnerer 0 rækker, så må brugeren ikke være oprettet idag.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester