Avatar billede tobiassen Nybegynder
21. januar 2009 - 09:41 Der er 9 kommentarer og
1 løsning

Antal måneder og dage siden dato

Hej

Kan i hjælpe med noget php der kan regne ud hvor mange år måneder og dage der er gået fra en dato til en anden.

Eks 1: Fra d. 2006-01-04 til d. 2009-04-24 er der gået xx år xx måneder og xx dage.

Eks 2: Fra d. 2009-01-04 til d. 2009-04-05 er der gået 1 dag

Datoerne kan variere da det er nogen jeg hiver ud fra en tabel.
Så hvis det kunne stilles op således ville det være super:

$dato1 = "".$raekke['dato1']."";

$dato2 = "".$raekke['dato2']."";


På forhånd tak.
Avatar billede vifa Novice
21. januar 2009 - 20:11 #1
Du skal konvertere dine datoer til Unix timestamp. Det relativ simpelt. Unix timestamp angiver hvor mange sekunder der er gået siden den første januar 1970.

Derfor skal du bruge 'strtotime', som kan konvertere en given dato om til et timestamp.

Eksempelvis: $dato = strtotime(01-01-2009)

Nu har du så antal sekunder fra 1970 og indtil den pågældende dato i $dato
Herefter tager du din dato nr. 2:

$dato2 = strtotime(03-01-2009)

Herfra er det faktisk simpel matematik:

Træk de to fra hinanden, og dividere med 24 så får du antal dage:

Koden kunne eksempelvis se sådan her ud:

$dato = strtotime(1-1-2009);
$dato1 = strtotime(1-3-2009);

$dato3 = $dato - $dato1;

$dato4 = $dato3 / 24;

echo $dato4 . "dag";
Avatar billede vifa Novice
21. januar 2009 - 21:20 #2
Har lige testet koden, den virker ikke helt som den skal...har lige rettet den til, og sat det op i en tabel. Lav en copy-paste af koden, håber du forstår det.

<?php

$dato = strtotime("1/20/2009");
$dato1 = strtotime("1/21/2009");

$dato3 = $dato1 - $dato;

$dato4 = $dato3/86400;


echo '

<center>

<table border="solid" width="40%">

<tr">
    <td><b>Fra</b></td>
    <td><b>Til</b></td>
    <td><b>Antal dage</b></td>
   
</tr>

<tr align="right">

    <td>' . date("d/m/Y", $dato) . '</td>
    <td>' . date("d/m/Y", $dato1) . '</td>
    <td>' . $dato4 . '</td>
</tr>

</table>

</center>

'
   
?>
Avatar billede tobiassen Nybegynder
21. januar 2009 - 21:35 #3
men den skal gern kunne skrive xx år xx måneder xx dage. Altså kun hvis der er gået så lang tid. Hvis der kun er gået 2 dage skal den sellvfølgelig ikke skrive måneder og år.
Avatar billede vifa Novice
21. januar 2009 - 21:59 #4
Du skal bare bruge en if else. If antal dage er over 364 dage, så skal den angive det som år. Burde ikke være så svært.

Har ikke tid til at lave den pågældende kode for dig lige nu da jeg er travlt optaget, måske imorgen, måske senere.
Avatar billede tobiassen Nybegynder
21. januar 2009 - 22:05 #5
ser frem til at du får tid så :)
Avatar billede vifa Novice
24. januar 2009 - 19:33 #6
<?php

$dato = strtotime("1/4/2009");
$dato1 = strtotime("2/6/2009");

$dato3 = $dato1 - $dato;

$dato4 = $dato3/86400;


if($dato4 >= '364')
{
    $year = floor($dato4/364);
}

if($dato4 >= '30')
{
    $month = $year*364;
    $month1 = $dato4 - $month;
    $month2 = $month1/30;
    $month3 = floor($month2);

}


if($dato4 >= '30')
{
    $days = $month3*30;
    $days1 = floor($month1 - $days);
}
elseif($month1 <= '30')
{
    $days1 = floor($dato4);
}


?>

<center>

<table border="solid" width="40%">

<tr>
    <td><b>Fra</b></td>
    <td><b>Til</b></td>
    <td><b>Forløbet tid</b></td>
   
</tr>

<tr align="right">

    <td><?php echo date("m/d/Y", $dato); ?></td>
    <td><?php echo date("m/d/Y", $dato1); ?></td>
    <td>
   
    <?php
   
    if($dato4 >= 364 && $year != '0')
    {
        echo $year . "år ";
    }
    if($dato4 >= 30 && $month3 != '0')
    {
        echo $month3 . "måneder ";
    }
   
    echo $days1 . 'dage';
   
   
    ?>   
   
    </td>
</tr>

</table>

</center>
Avatar billede vifa Novice
24. januar 2009 - 19:37 #7
Værsgo. Her er koden. Lav en copy paste og test det selv. Det er dog lidt svært, om end ikke umuligt, at tage højde for, at der ikke er lige mange dage i hver måned. De to datoer jeg har sat i $dato og $dato1 vil give "1måneder 3dage", hvilket skyldes at i selve koden har jeg sat en måned til at være 30 dage.
Avatar billede tobiassen Nybegynder
24. januar 2009 - 19:58 #8
Det er godt arbejde. men er desværre nødt til at have noget der er helt præcis, da jeg er ret afhængig af det præcis antal dage.
Avatar billede vifa Novice
24. januar 2009 - 20:05 #9
Det er også det præcise antal dage, næsten. Når du konvertere en dato med strtotime angiver den det præcise antal dage i de pågældende måneder der er imellem de to datoer. Det eneste der kan forekomme upræcist er, at jeg har regnet hver måned for 30 dage i beregningerne gennem koden.

Jeg kan selvfølige prøve at kigge på dette også, for at gøre det 100 % præcist, men så kan jeg ikke længere gøre det gratis.

Vi kunne eventuelt fastsætte en pris?
Avatar billede tobiassen Nybegynder
07. november 2012 - 22:27 #10
lukket
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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