07. december 2006 - 10:41Der er
13 kommentarer og 2 løsninger
udregne år, maaned, dage
jeg har et felt af typen date i min database. i dette felt gemmer jeg hvornår brugerne er færdige eller blev med uddannelsen. nu vil jeg godt gøre sådan at der udskrives i persones profil hvor mange år, måneder og dage der er til at personen bliver færdig eller hvor mange år, åneder, dage personen har været færdig indtil videre har jeg forsøgt med nedstående, men det virker ikke da der skal gøres sådan at når f.eks måneder overskrider 12 skal den starte fra 1 igen og år skal tælles op med en. Jeg har søgt her på eksperten og på google, men synes ikke lige jeg kunne finde noget der kunne bruge, så håber der en her som kanGive mig et skub i den rigtige retning.
$get = mysql_query("SELECT *, DATEDIFF(CURDATE(),fdato) AS dage, DATE_FORMAT(last_on, '%H:%i:%s') AS last_tid, DATE_FORMAT(last_on, '%d-%m-%Y') AS last_dato, DATE_FORMAT(oprettet, '%d-%m-%Y') AS oprettet, DATE_FORMAT(birth, '%d') AS dato, DATE_FORMAT(birth, '%m') AS maaned, DATE_FORMAT(birth, '%Y') AS aar FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter Brugernavn som er 1? $show = mysql_fetch_array($get);
//udregning for dage fra eller til person er færdig $fdage = abs($show["dage"]); $faar = ""; $fmaaned ="";
Jeg er nu kommet så langt at jeg får udskrevet et timestamp, men kan ikke lige regne ud hvordan man så regner ud hvor mange år, måneder og dage der er tilbage for det dur ikke bare at lave dette regnestykke $test/86400 da den så vil vise f.eks 730 dage efter 2 år hvor den så skulle skrive 2 år 0 måneder 0 dage. her er den kode jeg har indtil videre
$get = mysql_query("SELECT *, DATE_FORMAT(fdato, '%d') AS fdato, DATE_FORMAT(fdato, '%m') AS fmaaned, DATE_FORMAT(fdato, '%y') AS faar, DATE_FORMAT(last_on, '%H:%i:%s') AS last_tid, DATE_FORMAT(last_on, '%d-%m-%Y') AS last_dato, DATE_FORMAT(oprettet, '%d-%m-%Y') AS oprettet, DATE_FORMAT(birth, '%d') AS dato, DATE_FORMAT(birth, '%m') AS maaned, DATE_FORMAT(birth, '%Y') AS aar FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); // henter Brugernavn som er 1? $show = mysql_fetch_array($get);
//udregning for dage fra eller til person er færdig $fdato = $show[fdato]; $fmaaned = $show[fmaaned]; $faar = $show[faar]; $test = mktime(0,0,0,$fmaaned,$fdato,$faar);
datoen i databasen er 2007-12-10 den laver jeg om til 12-10-2007 med DATE_FORMAT så udskriver jeg $ageyears og får resultatet -2 men det skulle blive 1. jeg har kigget på udregningen om tror jeg har gennemskuet den, men synes ikke den ser ud til at være forkert, men måske du kan se om der er en fejl?
$get = mysql_query("SELECT *, DATE_FORMAT(fdato, '%m-%d-%Y') AS fadato FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error());
//udregning for dage fra eller til person er færdig $dbAge = explode("-", $show["fadato"]); $ageTime = mktime(0, 0, 0, $dbAge[0], $dbAge[1], $dbAge[2]); // Get the person's birthday timestamp $t = time(); // Store current time for consistency $age = ($ageTime < 0) ? ( $t + ($ageTime * -1) ) : $t - $ageTime; $year = 60 * 60 * 24 * 365; $ageyears = $age / $year; $ageyears = floor($ageyears);
og min forspørgsel i databsen ser sådan ud $get = mysql_query("SELECT *, DATE_FORMAT(fdato, '%m-%d-%Y') AS fadato, DATE_FORMAT(last_on, '%H:%i:%s') AS last_tid, DATE_FORMAT(last_on, '%d-%m-%Y') AS last_dato, DATE_FORMAT(oprettet, '%d-%m-%Y') AS oprettet, DATE_FORMAT(birth, '%d') AS dato, DATE_FORMAT(birth, '%m') AS maaned, DATE_FORMAT(birth, '%Y') AS aar FROM brugere WHERE brugernavn = '$bruger' LIMIT 1") or die(mysql_error()); $show = mysql_fetch_array($get);
nu virker det, men kun hvis datoen i databsen er lavere end idag, men nu forsøger jeg lige at få det her til at virke med måneder og dage og derefter forsøger jeg at lave udregningen for det hvis datoen er højre end idag. jeg skriver her hvis det driller
så er jeg kommet lidt længere men har problemer med at regne dagene ud. år og måned ser ud til at virke som det skal, men jeg kan ikke lige se hvor fejlen er ved dagene.
$ageTime = mktime(0, 0, 0, $famaaned, $fadato, $faaar); // Get the person's birthday timestamp $t = time(); // Store current time for consistency $age = ($ageTime < 0) ? ( $t + ($ageTime * -1) ) : $t - $ageTime; $year = 60 * 60 * 24 * 365; $ageyears = $age / $year; $ageyears = floor($ageyears);
Du kan jo ikke bare per definition sige gange 31, for der er ikke 31 dage i alle måneder...
Jeg har ikke rigtigt noget bud på dagene, men det kan godt være du bare skal starte forfra og søge på google efter et simpelt countdownscript der tæller begge veje.
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.