Avatar billede andersdp Nybegynder
25. oktober 2005 - 17:27 Der er 30 kommentarer og
2 løsninger

Ugenumrene i speciel måned

Hvis jeg kender måned og år, kan jeg så finde lige præcis de ugenumre som måneden strækker sig over?

For oktober 2005, er det eksempelvis 39, 40, 41, 42, 43 og 44
For november 2005 vil det være 44, 45, 46, 47 og 48.
Avatar billede jaw Nybegynder
25. oktober 2005 - 17:32 #1
Således tror jeg f.eks.:
$mdr = 10;
$year = 2005;

$start = mktime(0, 0, 0, $mdr, 1, $year);
$slut = mktime(0, 0, 0, ($mdr+1), 0, $year);
echo "Første uge: ".date("W", $start) .". Sidste uge: ". date("W", $slut);
Avatar billede mahler Nybegynder
25. oktober 2005 - 17:35 #2
Husk i øvrigt at være opmærksom på hvorledes du bestemmer om en uge hører med i en given måned eller ej:
* er det når der er dage i ugen, der ligger i måneden?
* er det hvis der er flest dage i ugen, der ligger i måneden?
* er det hvis mandagen ligger i måneden?
Avatar billede andersdp Nybegynder
25. oktober 2005 - 17:38 #3
jaw:
Så får jeg kun første og sidste uge med. Det givet et problem omkring nytår, når der er skudår...

mahler:
Det er *når der er dage i ugen, der ligger i måneden
Avatar billede jaw Nybegynder
25. oktober 2005 - 17:45 #4
Hvorfor giver det et problem ved nytår i skudår?
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:00 #5
Jeg fik vist rodet tingene sammen med skudår kontra antal uger i et givent år. Det jeg mente var:

Hvis nu jeg finder start ugen i december til 48 og slutugen som 1, hvordan ved jeg så om der findes en uge 53? Ja, man kan nok regne sig ud af det, men det var bare nemmere hvis der fandtes en metode der returnerede ugenumrene ud fra en given måned og år...

Altså noget i retning af getweeks(102005) der så returnerer 39, 40, 41, 42, 43 og 44
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:01 #6
Jeg forstår ikke, det er jo præcis hvad min gør! Den henter ugenumrene udfra månedsnummeret og året.
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:04 #7
Eller det vil sige, at den henter første og sidste ugenummer. Kør en løkke på de 2, og du har de imellemliggende :)

for($i = date("W", $start); $i <= date("W", $slut); $i++) {
  echo $i . " ";
}
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:13 #8
Ja, ok. Det fungerer kan jeg godt se.

Og dog:
1.januar næste ligger i uge 52, men det tager funktionen ikke højde for... Der returneres ugen som 0.
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:13 #9
1.januar næste år mente jeg... Den ligger søndag i uge 52.
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:14 #10
Når jeg tester det hos mig får jeg også:
Første uge: 48. Sidste uge: 52

Når jeg bruger
$mdr = 12;
$year = 2005;
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:21 #11
http://www.noode.net/cal.jpg

Så er det nok nemmere at forstå hvad jeg mener.
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:22 #12
Hvordan bruger du den dér? Jeg kan måske se et andet problem ved den, som jeg lige brainer, men den med at et 0 kan jeg ikke umiddelbart fremprovokere.
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:25 #13
Hvis du bruger:
$mdr = 1;
$year = 2006;

får du uge 0 for 1.januar 2006.
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:27 #14
Nej jeg gør ej. Men du henter jo også nogen datoer og noget, hvordan gør du det.

Og det problem jeg snakkede om, er ikke et problem.

Og, vil godt lige kommentere din flash fra din side, ser godt ud :)
Avatar billede andersdp Nybegynder
25. oktober 2005 - 18:34 #15
Får du returneret 52 hvis du bruger 1 og 2006? For jeg får godt 0 ud...

Tanx :)

Min function ser således ud:
function weekcalc()
{
    $mdr = 1;
    $year = 2006;
   
    $start = mktime(0, 0, 0, $mdr, 1, $year);
    $slut = mktime(0, 0, 0, ($mdr+1), 0, $year);
    for($i = date("W", $start); $i <= date("W", $slut); $i++)
    {
    echo $i . " ";
    }
}
Avatar billede jaw Nybegynder
25. oktober 2005 - 18:49 #16
Det er din løkke, som jeg selvf. kan se nu. Men prøv lige:
function weekcalc()
{
    $mdr = 1;
    $year = 2006;
   
    $start = mktime(0, 0, 0, $mdr, 1, $year);
    $slut = mktime(0, 0, 0, ($mdr+1), 0, $year);
    echo "Start: ".date("W", $start)." slut: ".date("W", $slut);
    for($i = date("W", $start); $i <= date("W", $slut); $i++)
    {
    echo $i . " ";
    }
}

Får du så stadig 0 og 5 ?
Avatar billede arne_v Ekspert
25. oktober 2005 - 19:14 #17
hvad med

<?php
    $res = array();
    $m = 1;
    $y = 2006;
    for($d = 1; $d <= cal_days_in_month(CAL_GREGORIAN, $m, $y); $d++) {
        $t = mktime(0, 0, 0, $m, $d, $y);
        $w = date("W", $t);
        if(!in_array($w,$res)) $res[] = $w;
    }
    for($i=0;$i<count($res);$i++) echo " " . $res[$i];
?>
Avatar billede andersdp Nybegynder
25. oktober 2005 - 19:22 #18
Begge forslag returnerer 0...
Avatar billede jaw Nybegynder
25. oktober 2005 - 19:25 #19
Jeg får 52 pg 5 i begge forslag. Har du en anden server du kan teste det på? Og nu tester du det uden alt muligt andet, ikke? Altså i en blank fil.
Avatar billede andersdp Nybegynder
25. oktober 2005 - 19:40 #20
Jep, blank fil.

Testet hos scannet, b-one og enavn med samme resultat 0 som start. Hvad tester du på?
Avatar billede andersdp Nybegynder
25. oktober 2005 - 19:59 #21
Hmm, det må da have noget med serverens tidsopsætning at gøre eller hvad?

Kan det være noget med hvornår ugen definitionsmæssigt starter - søndag eller mandag...
Avatar billede arne_v Ekspert
25. oktober 2005 - 20:06 #22
kan du copy paste output fra view source dea min version ind her ?
Avatar billede andersdp Nybegynder
25. oktober 2005 - 20:18 #23
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>

<body>
test<br />
0 1 2 3 4 5</body>
</html>
Avatar billede arne_v Ekspert
25. oktober 2005 - 20:25 #24
jeg får:

52 1 2 3 4 5
Avatar billede jaw Nybegynder
25. oktober 2005 - 20:26 #25
Jeg ved heller ikke helt hvad du laver. Nu har jeg testet både hos mig selv lokalt og på mit webhotel, og får 52 - 05 begge steder.
Avatar billede andersdp Nybegynder
25. oktober 2005 - 20:27 #26
Det må da være noget med, at min servers indstillinger er sat til at ugen starter søndag - det er den eneste forklaring jeg kan komme med, uden at vide noget om en servers opsætning...
Avatar billede arne_v Ekspert
25. oktober 2005 - 20:32 #27
jeg har aldrig hørt om at en server indstilling sætter HTMLS tags ind i PHP output
eller fjerner et mellemrum
Avatar billede andersdp Nybegynder
25. oktober 2005 - 20:38 #28
Nej, det var heller ikke det jeg mente :) Pastede bare det hele ind.

Anyways, løsningen ligger i at bruge *strftime("%V", $t)* - så får jeg det korrekte output.

Jeg kan ikke give anden forklaring end noget med serverens opsætning - kan I?
Avatar billede andersdp Nybegynder
26. oktober 2005 - 10:26 #29
I skal have nogle point, så smid et svar.
Avatar billede arne_v Ekspert
26. oktober 2005 - 10:49 #30
et svar fra mig
Avatar billede jaw Nybegynder
26. oktober 2005 - 12:18 #31
Og et fra mig.
Avatar billede andersdp Nybegynder
26. oktober 2005 - 12:29 #32
Tak for jeres tid og hjælp.
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