Avatar billede michaeltryl Seniormester
07. december 2006 - 10:41 Der 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 ="";
Avatar billede mcardle Nybegynder
07. december 2006 - 19:38 #1
Du kan bruge mktime();
Avatar billede michaeltryl Seniormester
07. december 2006 - 22:21 #2
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);

echo"$test<br>";
Avatar billede mcardle Nybegynder
08. december 2006 - 05:56 #3
<?php
            $user = $_SESSION['user'];
            connect();
                $q = mysql_query("SELECT * FROM profil WHERE user='$user'");
                $a = mysql_fetch_array($q);
               
                $dbAge = explode("-", $a["birthday"]);
                               
        $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);
            close();
?>

Så skal det bare stå sådan her i din db. måned-dag-år, men den viser kun antal år, så du må selv lige modificere den.
Avatar billede michaeltryl Seniormester
08. december 2006 - 12:21 #4
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);
Avatar billede mcardle Nybegynder
08. december 2006 - 13:27 #5
hvad udskriver den, hvis du echo'er dit array fra db'en?
Avatar billede mcardle Nybegynder
08. december 2006 - 13:29 #6
Hedder dit array $show = mysql_fetch_array($get);?
Avatar billede michaeltryl Seniormester
08. december 2006 - 19:12 #7
mit array ser sådan ud når det udskrives jeg her fjernet det som ikke er interessant for dette spørgsmål

Array ( => 2007-12-10 [fdato] => 2007-12-10 [9] => ....... => 12-10-2007 [fadato] => 12-10-2007 [16] => )

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);
Avatar billede mcardle Nybegynder
09. december 2006 - 00:39 #8
Du kan bare fjerne:

$dbAge = explode("-", $show["fadato"]);

Og sætte dine $maaned, $dato, $aar direkte ind i mktime();

Så den hedder:
$ageTime = mktime(0, 0, 0, $maaned, $dato, $aar); // 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);

Det skulle gerne virke... :o)
Avatar billede michaeltryl Seniormester
09. december 2006 - 00:56 #9
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
Avatar billede michaeltryl Seniormester
09. december 2006 - 01:35 #10
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);

$mrd = 60 * 60 * 24 * 31;
$nymrd = $ageyears * 12;
$agemrd = ($age / $mrd) - $nymrd;
$agemrd = floor($agemrd);

$dage = 60 * 60 * 24;
$nydag = $ageyears * 365;
$nymaaned = $agemrd * 31;
$agedage = ($age / $dage) - ($nymrd + $nymaaned);
$agedage = floor($agedage);

her skal den starte fra 0 igen når der er gået 31 dage
Avatar billede michaeltryl Seniormester
10. december 2006 - 19:32 #11
har du et bud på hvordan dagene skal udregenes?
Avatar billede mcardle Nybegynder
10. december 2006 - 21:02 #12
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.
Avatar billede michaeltryl Seniormester
10. december 2006 - 21:35 #13
okay jeg prøver at lede videre. jeg lukker her, men kom med et svar så deler vi point, du gjorde jo et forsøg :-)
Avatar billede mcardle Nybegynder
11. december 2006 - 00:55 #14
Hehe, tak...
Avatar billede michaeltryl Seniormester
11. december 2006 - 01:26 #15
lukker
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