Avatar billede nicocarlos Nybegynder
12. december 2004 - 13:53 Der er 41 kommentarer og
2 løsninger

Kalender problem med ugerne

Hejsa jeg har følgende problem:

http://www.majistic.com/~nicocarlos/Image/kal.gif

som i nok kunne se er der 53 uger, den fatter ikke at det er uge 1, det er sikkert noget i min kode, men jeg kan ikke få rettet det til :(

KodeN:

if($row != 1 and $col == 1)    {   
                $calendar .= "<font color=#008000>";
                if($dayno < $daymin){
                    $y = $year;
                    if($month == 1) $m = 12;
                    if($month != 1) $m = $month - 1;
                    if($month == 1) $y = $year - 1;
                    $d = ($dom[$daymaxl - 1]) + $dayno;
                    $calendar .= sprintf("%02d",getWeekNumber($y, $m, $d));
                }else{
                    if($dayno > $daymax){
                        $y = $year;
                        if($month == 12) $m = 1;
                        if($month != 12) $m = $month + 1;
                        if($month == 12) $y = $year + 1;
                        $d = $dayno - $daymax;
                        $calendar .= sprintf("%02d",getWeekNumber($y, $m, $d));
                    }else{
                        $calendar .= sprintf("%02d",getWeekNumber($year, $month, $dayno));
                    }
                }
                $calendar .= "</font>";
            }

Håber der er en som kan hjælpe med at få rettet det til :)
Avatar billede mjl Nybegynder
12. december 2004 - 13:55 #1
Der er da også 53 uger i 2004
Avatar billede mjl Nybegynder
12. december 2004 - 13:56 #2
Tjek en kalender - af pap... :o)
Avatar billede nicocarlos Nybegynder
12. december 2004 - 14:03 #3
hmm, i min pap kalender er der altså 52 uger og uge 1 starter Mandag d.27 dec
Avatar billede erikjacobsen Ekspert
12. december 2004 - 14:05 #4
Der er forskel på amerikanske ugenumre, og rigtige ugenumre. Er din kalender amerikansk?
Avatar billede mjl Nybegynder
12. december 2004 - 14:05 #5
ok - jamen - uge 52 slutter med 26. dec. dvs. at der er en uge 53, der strækker sig til d. 31. dec. derefter starter det nye år, med uge 1 fra d. 1 jan.
Avatar billede nicocarlos Nybegynder
12. december 2004 - 14:06 #6
Og desuden mangler jeg også at vise lidt af den kode som også er en del af uge beregningen
Avatar billede nicocarlos Nybegynder
12. december 2004 - 14:09 #7
Jeg er ikke helt sikker erikjacobsen, men jeg tror faktisk at det er amerikansk, men den skal være dansk, jeg kan vise dig min funktion til ugerne:

function getWeekNumber($year, $month, $day){
    $YearInQuestion = $year;
   
    $InputDateOffset = CalculateIsoWeekday($year, $month, $day);
   
    $January1Offset = CalculateIsoWeekday($YearInQuestion, 1, 1);
    $December31Offset = CalculateIsoWeekday($YearInQuestion, 12, 31);
   
    if($month == 1 and $day < 4 and $January1Offset > 3 and $InputDateOffset > 1)    {
        $YearInQuestion = $YearInQuestion - 1;
    }
 
    if ($month == 12 and $day > 28 and $December31Offset < 3 and $InputDateOffset < 5)    {
        $YearInQuestion = $YearInQuestion + 1;
    }
    $January4 = getDatenumber($YearInQuestion, 1, 4);
   
    $FirstMondayOfYear = getDatenumber($YearInQuestion, 1, 4 - CalculateIsoWeekday($YearInQuestion, 1, 4));
   
    $weeknum = (getDateNumber($year, $month, $day) - $InputDateOffset - $FirstMondayOfYear ) / 7 + 1;
    return($weeknum);   
}


kan du hjælpe med at få rettet den lidt til?
Avatar billede mjl Nybegynder
12. december 2004 - 14:09 #8
Måske kunne du så sige ...

if ($ugenr == '53') {
$ugenr = '1';
}

...eller noget!
Avatar billede mjl Nybegynder
12. december 2004 - 14:10 #9
if ($weeknum == '53') {
$weeknum = '1';
}
Avatar billede mjl Nybegynder
12. december 2004 - 14:13 #10
Sån måske?

<?
function getWeekNumber($year, $month, $day){
    $YearInQuestion = $year;
   
    $InputDateOffset = CalculateIsoWeekday($year, $month, $day);
   
    $January1Offset = CalculateIsoWeekday($YearInQuestion, 1, 1);
    $December31Offset = CalculateIsoWeekday($YearInQuestion, 12, 31);
   
    if($month == 1 and $day < 4 and $January1Offset > 3 and $InputDateOffset > 1)    {
        $YearInQuestion = $YearInQuestion - 1;
    }
 
    if ($month == 12 and $day > 28 and $December31Offset < 3 and $InputDateOffset < 5)    {
        $YearInQuestion = $YearInQuestion + 1;
    }
    $January4 = getDatenumber($YearInQuestion, 1, 4);
   
    $FirstMondayOfYear = getDatenumber($YearInQuestion, 1, 4 - CalculateIsoWeekday($YearInQuestion, 1, 4));
   
    $weeknum = (getDateNumber($year, $month, $day) - $InputDateOffset - $FirstMondayOfYear ) / 7 + 1;
   
    if ($weeknum == '53') {
    $weeknum = '1';
    }
   
    return($weeknum);   
}

?>
Avatar billede erikjacobsen Ekspert
12. december 2004 - 14:17 #11
Du ved godt at ugenummer kan fås automatisk i nyere PHP-ere??

  $time = time();

  for ($i=0;$i<100;$i++) {
    print date("W Y-m-d",$time)."\n";
    $time+=24*60*60;
  }
Avatar billede mjl Nybegynder
12. december 2004 - 14:51 #12
Hvad så der - kommer du videre, eller...
Avatar billede coderdk Praktikant
12. december 2004 - 14:56 #13
function getWeekNumber($year, $month, $day)
{
  return strftime( "%V", mktime( 0, 0, 0, $moth, $day, $year ) );
}
Avatar billede coderdk Praktikant
12. december 2004 - 14:56 #14
Der var en BUG i min kode :D LOL! Et møl faktisk ;) Det skulle være:

function getWeekNumber($year, $month, $day)
{
  return strftime( "%V", mktime( 0, 0, 0, $month, $day, $year ) );
}
Avatar billede nicocarlos Nybegynder
12. december 2004 - 15:09 #15
Tilbage nu.

Jeg prøvede din mil - men nu har jeg 2*uge 1, fordi du lavede jo bare uge 53 om til uge 1.
Avatar billede nicocarlos Nybegynder
12. december 2004 - 15:10 #16
coderdk - hvad skal jeg skifte din kode ud med?
Avatar billede coderdk Praktikant
12. december 2004 - 15:11 #17
Havde du ikke en funktion der hed getWeekNumber? Bare skift hele den funktion ud med min ;)
Avatar billede nicocarlos Nybegynder
12. december 2004 - 15:23 #18
coderdk, så siger alle uger 0
Avatar billede coderdk Praktikant
12. december 2004 - 15:53 #19
Erh, det lyder dælme underligt! Hvilken version af PHP er det? Jeg har ellers brugt den tit... %V står beskrevet her:

http://dk2.php.net/strftime

Ellers prøv og se om du får det samme resultat hvis du bruger date:

function getWeekNumber($year, $month, $day)
{
  return date( "W", mktime( 0, 0, 0, $month, $day, $year ) );
}
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:04 #20
Den laver det samme med 53 uger, underligt :/
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:07 #21
Tror du ikke bare vi kan om definere:

$January4 = getDatenumber($YearInQuestion, 1, 4);
   
$FirstMondayOfYear = getDatenumber($YearInQuestion, 1, 4 - CalculateIsoWeekday($YearInQuestion, 1, 4));
   
$weeknum = (getDateNumber($year, $month, $day) - $InputDateOffset - $FirstMondayOfYear ) / 7 + 1;

Såden så den første mandag i det næste år er dagen efter der er fået 52 uger?
Avatar billede mjl Nybegynder
12. december 2004 - 16:12 #22
Har fundet dette - kan det mon bruges til noget?

<?
switch(date("w")) {
        case 1: $daysub=0; break;
        case 2: $daysub=1; break;
        case 3: $daysub=2; break;
        case 4: $daysub=3; break;
        case 5: $daysub=4; break;
        case 6: $daysub=5; break;
        case 0: $daysub=6; break;
}
$weeknumber=(date ("z", mktime(0,0,0, date("m"), date("d")-$daysub, date("Y")) )+7)/7;
echo round($weeknumber);
?>
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:13 #23
ville du bruge det isteadet for en funktion eller hvad mil?
Avatar billede coderdk Praktikant
12. december 2004 - 16:13 #24
Det er også korrekt, der er 53 uger i 2004, I Danmark bruger vi ISO-8601:1988 standarden, som siger at den første uge i er den uge der har mindst fire dage i det nye år - Hvis din papkalender har 52, er det en fejl ;)
Avatar billede mjl Nybegynder
12. december 2004 - 16:15 #25
Tænkte jo nok, der var 53 .... !!!
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:23 #26
Så er min pap kalender forkert. Jeg har bare altid troet det var 52 uger..og uge 1 sagtens kunne være i det gamle år. Underligt hehe
Avatar billede mjl Nybegynder
12. december 2004 - 16:25 #27
Har ledt som en gal, og kunne heller ikke finde andet end, at der var 53 uger...
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:27 #28
men uge 1 starter da ikke før den 3 så - jeg har altså tjekket alle mine kalendere og de siger 52 uger - endnu mere underligt
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:30 #29
Det kan ikke pass, der er altså ikke 53 uger..
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:31 #30
52*7 = 364 dage.

og jeg tror ikke på at man laver en halv uge 53.
Avatar billede mjl Nybegynder
12. december 2004 - 16:33 #31
ok
Avatar billede mjl Nybegynder
12. december 2004 - 16:34 #32
Dem der laver kalendere har nok knald i låget - skriv til dem...
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:34 #33
Det kan godt være i har ret - jeg er pisse forvirret..hehe
Avatar billede mjl Nybegynder
12. december 2004 - 16:35 #34
Vær ikke forvirret - på Eksperten bliver man oplyst, og kaos forsvinder - tro på det!
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:38 #35
Så har der slet ikke været noget problem - det er bare mig som har været snot forvirret fordi jeg har siddet med min kærestes kalender som siger uge 52 -> Uge 1
I stedet for Uge 52 -> Uge 53

Sorry :/
Avatar billede mjl Nybegynder
12. december 2004 - 16:39 #36
No Problem
Avatar billede coderdk Praktikant
12. december 2004 - 16:40 #37
Dine kalendere er så forkerte ;) Prøv evt. at finde nogle danske kalendere på nettet - Uge 53 er fra mandag den 27. december til den 2. januar ;)
Avatar billede mjl Nybegynder
12. december 2004 - 16:41 #38
Ja
Avatar billede mjl Nybegynder
12. december 2004 - 16:42 #39
Jeg sagde forkert med datoen - der er 53 uger, og datoerne er som du skriver; til 2 jan.
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:42 #40
mil du kan ligge et svar så kan i dele, fordi i hjalp mig med at finde ud af at der godt kan være 53 uger på et år ;)
Avatar billede mjl Nybegynder
12. december 2004 - 16:43 #41
okay
Avatar billede nicocarlos Nybegynder
12. december 2004 - 16:45 #42
Og jeg smider min kærestes kalender ud af vinduet nu - sikke en lorte kalender - nu har jeg rodet med det lort hele dagen ;)
Avatar billede mjl Nybegynder
12. december 2004 - 16:45 #43
He he ud med lortet ja
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