Avatar billede michaeltryl Seniormester
13. januar 2018 - 22:05 Der er 5 kommentarer

Tæl antal måneder, uger, dage....

Hej
Sidder og bøvler med lidt udregninger.
Jeg har f.eks.

39 dage mellem 2 datoer
Nu vil jeg godt udregne
Antal måneder
Antal uger
Antal dage

Så f. Eks er 39 dage
1 måned
1 uge
2 dage

Hvordan ser den udregning ud :)
Avatar billede erikjacobsen Ekspert
13. januar 2018 - 23:51 #1
Kan du beskrive nærmere hvad du egentlig ønsker. Måneder kan være 28, 29, 30 eller 31 dage lange. Hvordan skal dine beregninger se ud i de tilfælde?
Avatar billede olsensweb.dk Ekspert
14. januar 2018 - 09:38 #2
du kan lave en tilnærmelses beregning med % og /

<?php
$days = 39;

$month = floor($days / 30);
$days = $days % 30;
$weeks = floor($days / 7);
$days = $days % 7;

echo $month . " " . $weeks . " " . $days;
?>


men erikjacobsen er inde på det rigtige med #1, så det rigtige vil være at tage mellem 2 datoer med date_diff
http://php.net/manual/en/function.date-diff.php
https://stackoverflow.com/questions/10427694/php-difference-in-months-between-two-dates
https://stackoverflow.com/questions/3028491/php-weeks-between-2-dates
https://stackoverflow.com/questions/14519187/calculate-months-years-and-days-between-two-given-dates-as-timestamp
Avatar billede michaeltryl Seniormester
14. januar 2018 - 09:59 #3
Tak forslagene.
Jeg kigger på dem.
Indtil videre er min udregning sådan her
Hvor forskellen er forskellen i sekunder mellem 2 datoer.
Gik fra dage, til sekunder da det gav nogle andre muligheder.

$maaneder = floor(($forskel-$tid[years]*31556926)/2629743.83);
$uger = floor(($forskel-$tid[years]*31556926-$maaneder*2629743.83)/604800);
$dage = floor(($forskel-$tid[years]*31556926-$maaneder*2629743.83-$uger*608400)/86400);
Avatar billede arne_v Ekspert
14. januar 2018 - 16:18 #4
Selv med to tider og specifik tidsforskel kan maaneder godt blive et noget uldent begreb.

Hvad er (31/1 + 1 maaned) - 1 maaned?

:-)
Avatar billede arne_v Ekspert
14. januar 2018 - 16:32 #5
PHP siger 3/2.

:-)

<?php
$dt = new DateTime();
$dt->setDate(2018, 1, 31);
$dt->add(new DateInterval('P1M'));
$dt->sub(new DateInterval('P1M'));
echo $dt->format('d/m/Y');
?>
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

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