Avatar billede leshrac Nybegynder
28. september 2007 - 13:05 Der er 8 kommentarer og
1 løsning

Hastespm 8] Beregn differencen mellem to datoer i måneder?

Sidder lige og arbejder... :) og skal bruge en metode til at beregne hvor mange måneder der er mellem dato A og dato B

Dato A henter jeg fra databasen og datoB er sådanset bare NOW()

Nogen kløgtige foreslag :)?

NB: dato A er af formatet date(Y-m-d H:i:s") eller datetime i PHPMyAdmin
Avatar billede styrk Nybegynder
28. september 2007 - 13:29 #1
Kan dette bruges?

<?php
   
function tid ($startdato=0)
{
    $slutdato = date("Y-m-d H:i:s",time());

    if($startdato && $slutdato || $startdato == "0")
    {
        if ((eregi('^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$', $startdato, $array1)) && (eregi('^([0-9]+)-([0-9]+)-([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$', $slutdato, $array2)))
        {
            $start = mktime($array1[4],$array1[5],$array1[6],$array1[2],$array1[3],$array1[1]);
            $slut = mktime($array2[4],$array2[5],$array2[6],$array2[2],$array2[3],$array2[1]);

            $sec = $slut - $start;

            $dage = floor(($sec / 3600) / 24);
            $timer = floor($sec / 3600);
            $minutter = floor(($sec - $timer*60*60) / 60);

            printf ("Der er gået %d dage, %d timer og %d minuter imellem %s og %s",
                $dage,
                $timer,
                $minutter,
                $start,
                $slut);
        }
        else
        {
            printf ('%s eller %s er ikke af korrekt format',
                $start,
                $end);
        }

    }
    else
    {
        print '$startdato eller $slutdato er ikke defineret!';
    }
}


tid("2001-08-11 10:50:00");

?>
Avatar billede styrk Nybegynder
28. september 2007 - 13:30 #2
printf ('%s eller %s er ikke af korrekt format',
                $start,
                $end);

sku være


            printf ('%s eller %s er ikke af korrekt format',
                $start,
                $slut);


:-)
Avatar billede terrak Nybegynder
28. september 2007 - 14:01 #3
Der findes en funktion i MySQL (4.1.1+) der regner forskellen i dage ud, mellem to datoer. Prøv evt. dette:

select datediff(NOW(),`datofelt`) from `tabel`

(trækker datofeltet fra NOW(). Byt rundt på dem hvis det er NOW() der skal trækkes fra datofeltet)

Problemet er bare at det jo ikke er opgivet i måneder, og at en måned ikke har et fast antal dage.
Avatar billede leshrac Nybegynder
28. september 2007 - 14:04 #4
Alt imens jeg har ventet på et svar har jeg fundet en gyldig (om end lidt hacket) metode til det :)

            $iCreatedMonth = date("m", strtotime($oUserCreatedOn->created_on));
            $iCreatedYear = date("Y", strtotime($oUserCreatedOn->created_on));
            $iThisYear = date("Y");
            $iThisMonth = date("m");
           
            $iYearDiffrence = $iThisYear-$iCreatedYear;
            if($iYearDiffrence == 0)
            {
                $iProfileAge = $iThisMonth-$iCreatedMonth;
                echo $iProfileAge;
            }
            else
            {
              $iExtraMonthDiffrence = $iYearDiffrence*12;
              $iProfileAge = ($iThisMonth + $iExtraMonthDiffrence)-$iCreatedMonth;
            }

echo iProfileAge; // det giver faktisk hvor mange måneder der er mellem dato A og dato B UDEN den måned vi er i nu... :) men skal måneden vi er i nu med er det vel bare at plusse den med 1 :)

Smid dog et svar begge to... jeg bruger ikke eksperten nok til at jeg gider samle point.. så kan ligeså godt komme af med dem ;D
Avatar billede styrk Nybegynder
28. september 2007 - 14:09 #5
behøver ikke points :-) De er overrated!

men, prøvede du mit? (ikke testet, snuppede det bare fra en gammel hjemmeside jeg lavede engang)

:pp
Avatar billede terrak Nybegynder
28. september 2007 - 14:14 #6
Jeg samler kun på point fra svar som bliver taget i brug, eller har hjulpet på vej :-)
Avatar billede leshrac Nybegynder
28. september 2007 - 14:32 #7
hehe styrk jeg kiggede lidt på dit... Så vidt jeg kunne se så gav det mig differencen mellem to tider på alle andre måder end i måneder :)? er det ikke korrekt?
Avatar billede styrk Nybegynder
28. september 2007 - 14:34 #8
du kan vel bare dividere dagene med 12 (antal måneder)? :p
Avatar billede leshrac Nybegynder
01. oktober 2007 - 09:04 #9
Måneder er jo ikke ens... :)
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