Avatar billede NielsErikP Mester
25. marts 2013 - 14:05 Der er 17 kommentarer og
1 løsning

Timestamp Aritmetik...

Hej...

Er der en der kan regne her på eksperten.dk...

Kan ikke lige se, hvad jeg gør galt i følgende, siden at modulus   af hhv. uger og måneder giver samme antal sekunder.
Og resultatet af uger er lig "0".



$sekunder_om_dagen = 24*60*60;
                echo "sekunder_om_dagen : " . $sekunder_om_dagen . "<br>";
                $sekunder_om_ugen = 7*24*60*60;
                echo "sekunder_om_ugen : " . $sekunder_om_ugen . "<br>";
                $sekunder_14dage = 14*24*60*60;
                echo "sekunder_14dage : " . $sekunder_14dage . "<br>";
                $sekunder_om_året = 365*24*60*60;
                echo "sekunder_om_året : " . $sekunder_om_året . "<br>";
                $sekunder_mdr = ($sekunder_om_dagen*365) /12;
                echo "sekunder_mdr : " . $sekunder_mdr . "<br>";
                $timestamp = time();
                echo "timestamp : " . $timestamp . "<br><br>";
               
                $modulus_år = $timestamp%$sekunder_om_året;
                echo "Modulus_år(=timestamp%sekunder_om_året) : " . $modulus_år ."<br><br>";
                $modulus_mdr = $modulus_år%$sekunder_mdr;
                echo "Modulus_mdr(=modulus_år%sekunder_mdr) : " . $modulus_mdr ."<br><br>";
                $modulus_uger = $modulus_mdr%$sekunder_om_ugen;
                echo "Modulus_uger(=modulus_mdr%sekunder_om_ugen) : " . $modulus_uger ."<br><br>";
                $antal_år =  ($timestamp - $modulus_år) / $sekunder_om_året;
                echo "år : " .$antal_år ."<br>";
                $antal_mdr =  ($modulus_år - $modulus_mdr)/$sekunder_mdr;
                echo "måneder : " .$antal_mdr ."<br>";
                $antal_uger = ($modulus_mdr - $modulus_uger) / $sekunder_om_ugen;
                echo "uger : " .$antal_uger;



På forhånd tak.
Avatar billede olebole Juniormester
25. marts 2013 - 14:46 #1
<ole>

Allerførst: Hvad skal det bruges til? Der er jo visse unøjagtigheder ved dén fremgangsmåde. Der er forskel på månedslængder og der er også skudår at tage hensyn til

/mvh
</bole>
Avatar billede NielsErikP Mester
25. marts 2013 - 15:10 #2
Hej...

Jamen det jeg prøvede på var egentligt at arbejde mig frem til en løsning/funktion, der kunne udskrive to bestemte uge dage m/ dato i hele måneden f.eks alle tirs og torsdage med deres respektive datoer.. og det gældende for lige meget hvilken månede på året man befandt sig i.
Giver det mening??
Avatar billede olebole Juniormester
25. marts 2013 - 15:58 #3
Prøv at kikke på strtotime. Med lidt krea kan den formodentlig bruges  =)
Avatar billede olebole Juniormester
25. marts 2013 - 23:03 #4
Så fik jeg selv tid til at kikke på det og kom frem til følgende:

<?php
function getWeekDays($year, $month, $dayname) {
    $ret = array();
    $stamp = strtotime($year.'-'.$month.'-1');
    $stamp_last = strtotime('next month -1 second', $stamp);
    if ($dayname===strtolower(date('l', $stamp))) $ret[] = $stamp;
    $new_stamp = 0;
    while ($new_stamp<$stamp_last) {
        if ($new_stamp>0) $ret[] = $new_stamp;
        else $new_stamp = $stamp;
        $new_stamp = strtotime('next '.$dayname, $new_stamp);
    }
    return $ret;
}

$a = getWeekDays(2013, 3, 'friday');

foreach ($a as $stamp) {
    echo '<div>'.date('l F d.', $stamp).'</div>';
}
?>
Avatar billede NielsErikP Mester
26. marts 2013 - 00:31 #5
Hej...

Tja.. så kan jeg jo "Titte" lidt til den i #4... Er dog i fuld gang :-)
Har det lidt sådan at jeg jo ikke lærer noget ved du laver det, ole.. Ikke at du skal misforstå mig, men man lærer jo bedst ved udfordringer.. og at tage dem op. Så jeg holder mig lige til #3.
Skal dæleme nok lade høre fra mig, når ideerne brænder ud "Smiler".
Avatar billede olebole Juniormester
26. marts 2013 - 01:05 #6
Helt cool, men lov mig, du på et tidspunkt kikker på strtotime. Den kan en hel del sjove ting  *o)
Avatar billede arne_v Ekspert
26. marts 2013 - 01:57 #7
Alternativt forslag:


<?php
function getWeekDays($year, $monthname, $dayname) {
    $days = array();
    $days[] = strtotime("first $dayname of $monthname $year");
    $days[] = strtotime("second $dayname of $monthname $year");
    $days[] = strtotime("third $dayname of $monthname $year");
    $days[] = strtotime("fourth $dayname of $monthname $year");
    if(date('F', strtotime("fifth $dayname of $monthname $year")) == date('F', strtotime("fourth $dayname of $monthname $year"))) {
        $days[] = strtotime("fifth $dayname of $monthname $year");
    }
    return $days;
}

$alld = getWeekDays(2013, 'march', 'friday');
foreach ($alld as $oned) {
    echo date('l F d.', $oned) . "\r\n";
}

$alld = getWeekDays(2013, 'April', 'Friday');
foreach ($alld as $oned) {
    echo date('l F d.', $oned) . "\r\n";
}
?>
Avatar billede NielsErikP Mester
26. marts 2013 - 13:13 #8
Hej...

#6: Er i fuld gang med strtotime :-)

Tak for indspark, arne...
Avatar billede olebole Juniormester
27. marts 2013 - 23:18 #9
Umiddelbart tror jeg, at jeg ville føle mig heldigere, hvis jeg som udenforstående udvikler skulle arve/vedligeholde Arnes kode, end min egen. Der er næppe forskel i virkningen, men Arnes er bedre, fordi den er mere selvforklarende - uden for megen unødig 'jongleren'  =)
Avatar billede NielsErikP Mester
28. marts 2013 - 00:08 #10
Hej...

Ja... Det jeg har det største problem med.. er at finde formen på den argumenter strtotime kan tage.. Så det leger jeg først med.. titter som sagt til begge jeres kode bla. din mht.  ($var1 ."-" .$var2 ."-" ."-1")
Avatar billede olebole Juniormester
28. marts 2013 - 00:36 #11
Her er lidt hjælp. Kik ikke mindst under Relative Formats
Avatar billede NielsErikP Mester
28. marts 2013 - 01:41 #12
Hej...

Tak for hjælpen begge... Var netop siden i dit link i #11, ole.. jeg netop sad med... Så det bliver nok noget i stil med arne's eksempel mht. first, second osv...


Arne smider du lige et svar??
Avatar billede arne_v Ekspert
28. marts 2013 - 02:37 #13
svar
Avatar billede NielsErikP Mester
29. marts 2013 - 23:36 #14
Hej...

Hvordan med, hvis man ønsker både at returnere $days og $dayname fra funktionen, _Kan dette lade sig gøre at returnere mere end en værdi/variable??
Avatar billede olebole Juniormester
30. marts 2013 - 00:03 #15
Du kunne returnere et array, hvor første element er navnet, og andet er array'et af dage:

return array($dayname, $days);

- men hvorfor? Der, hvor du kalder funktionen, bruger du jo navnet på dagene, du søger. Så er der vel ikke grund til, at funktionen returnerer det navn  =)
Avatar billede NielsErikP Mester
30. marts 2013 - 00:29 #16
Hej..

Okay tak, ole.
Ja..Det kan du have ret i, man kan vel bare lave en variable der f.eks hedder $weekDay og smide den som $dayname.. Så som du siger er der jo ingen grund til at returnere "Wednesday". Det var for at have den som tekst i en echo.
Rart at høre mht. til multiple returneringer.
Avatar billede olebole Juniormester
30. marts 2013 - 00:41 #17
Du kunne også:

array_unshift($days, $dayname);
return $days;

Så vil første element i $days være navnet på dagene, mens selve dagene begynder ved element nr. 1.

Men som vi allerede er blevet enige om, er der ingen grund til at returnere navnet til et sted, hvor det i forvejen er kendt
Avatar billede NielsErikP Mester
01. april 2013 - 23:20 #18
Hej...

Ja... nu ved jeg ikke, hvor meget jeg kan udnytte denne tråd, men prøver.... Nogen der kan se, hvor problemet ligger i forhold til at hvis jeg kalder Funktionen "Ugedage" med samtlige måneder... Giver den dato, månede, år.. undtagen hvis jeg kalder med "september".. så giver den kun dato, år:



function Ugedage($dayname, $month , $year) {
                    $day = array();
                    $day[] = strtotime("first $dayname of $month $year");
                    $day[] = strtotime("second $dayname of $month $year");
                    $day[] = strtotime("third $dayname of $month $year");
                    $day[] = strtotime("fourth $dayname of $month $year");
                    if(date('F',strtotime("fifth $dayname of $month $year")) == date('F', strtotime("fourth $dayname of $month $year"))) {
                        $day[] = strtotime("fifth $dayname of $month $year");
                    };
                    return $day;
                   
                };
                $udskriv =     Ugedage('wednesday', 'sep' ,2013);
               
                foreach($udskriv as $enDag) {
                    $dag= explode("-", date("j-m-Y", $enDag));
                    $månede = "";
           
                    switch($dag[1]) {
                        case 01:
                            $månede = "januar";
                            break;
                        case 02:
                            $månede = "februar";
                            break;   
                        case 03:
                            $månede = "marts";
                            break;   
                        case 04:
                            $månede = "april";
                            break;   
                        case 05:
                            $månede = "maj";
                            break;   
                        case 06:
                            $månede = "juni";
                            break;   
                        case 07:
                            $månede = "july";
                            break;   
                        case 08:
                            $månede = "august";
                            break;   
                        case 09:
                            $månede = "september";
                            break;   
                        case 10:
                            $månede = "oktober";
                            break;
                        case 11:
                            $månede = "november";
                            break;
                        case 12:
                            $månede = "december";
                            break;
                        default:
                            break;
                    }
           
                    $dato =  $dag[0] . " " .$månede ." " . $dag[2];
                                               
                    echo "<div class=\"ramme\">" .
                            "<div class=\"dato\">" . $dato ."</div>".
                            "<div class=\"akt\">" ."</div>".
                        "</div>";
                };
            ?>           


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