Avatar billede MarkA Praktikant
24. november 2009 - 20:03 Der er 8 kommentarer og
1 løsning

Hjælp til en ugekalender

Hej eksperter.
Jeg skal til at lave en kalender som kan vise 1 uge ad gangen. Den skal "snakke" med en database. Det skal bruges til et udlejnings system. Så der skal være bil 1, bil 2 etc. ned af X-aksen og dage ad Y-aksen. Jeg har brudt mit hoved i et par dage og jeg kan simpelthen ikke finde en løsning på hvordan jeg skal gøre.. Er der nogler der har nogle ideer til en start. Den største udfordring for mig er at få lavet den del der skal vise ugen med datoer. Håber I forstår hvor jeg gerne vil hen.
Avatar billede FrederikBache Nybegynder
24. november 2009 - 22:48 #1
Jeg vil anbefale dig til at læse lidt om php funktionerne date() og strtotime().
Med date() kan du få alle oplysninger du kunne ønsker dig om et tidsstempel.
Med strtotime() kan du lave nye tidsstempler. Fx kan du skrive strtotime(+7 days) for at hoppe en uge frem.
Det giver forhåbentlig lidt inspiration.
Avatar billede MarkA Praktikant
24. november 2009 - 23:22 #2
Jeg har læst en del på det, men kan ikke rigtigt finde en løsning... Jeg er gået total fast..

Jeg skal have det lavet så alle uger starter med mandag og slutter fredag.

så hvis jeg finder datoen i dag og hvad nr. dagen i denne uge er  date('N');

så skal den ud fra i dag regne ud hvor mange felter/dage der skal sættes ind før og efter dagen i dag, f.eks i en table. Derfra skal den så sætte datoen i felterne...

Men hvordan..
Avatar billede MarkA Praktikant
24. november 2009 - 23:23 #3
det skal selvfølgelig slutte søndag
Avatar billede FrederikBache Nybegynder
25. november 2009 - 00:57 #4
date("N") giver 1 for mandag og 7 for søndag. Dvs. får vi et 1-tal tilbage er vi på en mandag, et 2-tal en tirsdag og så fremdeles.

Vi kan derfor finde tidstempel for denne uges mandag ved at skrive:
$day = strtotime("-".(date("N")-1)."days");

Vi kan nu skrive hele ugen ud, fx således:

for($i = 0; $i < 7; $i++){
  echo date("d.m.Y",$day).'<br>';
  $day = strtotime("+1 day",$day);
}

Når du så skal lave navigationen til senere og tidligere uger, vil jeg anbefale at du regner datoen ud for forrige mandag og næste mandag, og sender dem som parametre i linket til forrige og næste mandag, og hvis disse så er sat, så bruge disse til at regne ud hvilket dag du skal starte på.
Avatar billede MarkA Praktikant
26. november 2009 - 16:59 #5
okay... jeg har prøvet at få den til at smide både dato og ugenavn i samme løkke... Men den laver mere end 7 bokse. Det er sq lidt for lang tid siden jeg har rodet med det..

Er der nogle der kan se fejlen, og tak for hjælpen indtil videre
Avatar billede MarkA Praktikant
26. november 2009 - 17:07 #6
jeg har egentlig fundet fejlen nu, men hvad er forklaringen???

den gamle kode som jeg glemte ovenfor:
<?php

$day = strtotime("-".(date("N")-1)."days");

for($i = 0; $i < 7; $i++){


for ( $y=1; $y<=7; $y++) {

if($y==1) $ugedag = "Man";
if($y==2) $ugedag = "Tir";
if($y==3) $ugedag = "Ons";
if($y==4) $ugedag = "Tor";
if($y==5) $ugedag = "Fre";
if($y==6) $ugedag = "Lør";
if($y==7) $ugedag = "Søn";


  echo "<div style='float:left; padding:5px; border:1px solid blue;'>" . $ugedag . date("d.m.y",$day) . "</div>" ;
  $day = strtotime("+1 day",$day);
}}


?>


Og den nye kode...
----------------------




<?php

$day = strtotime("-".(date("N")-1)."days");

for($i = 0; $i < 1; $i++){


for ( $y=1; $y<=7; $y++) {

if($y==1) $ugedag = "Man";
if($y==2) $ugedag = "Tir";
if($y==3) $ugedag = "Ons";
if($y==4) $ugedag = "Tor";
if($y==5) $ugedag = "Fre";
if($y==6) $ugedag = "Lør";
if($y==7) $ugedag = "Søn";


  echo "<div style='float:left; padding:5px; border:1px solid blue;'>" . $ugedag . date("d.m.y",$day) . "</div>" ;
  $day = strtotime("+1 day",$day);
}}


?>

Det eneste der er ændret er 7 tallet fra den første løkke som er ændret til et 1-tal
Avatar billede FrederikBache Nybegynder
26. november 2009 - 18:52 #7
Det er fordi den inderste løkke kun skal køres igennem 7 gange, og det gør den jo i forvejen. Hvis du havde skrevet 7 i den yderste, så ville du køre den inderste 7*7 = 49 gange

Men det ser godt ud :)

Du kunne evt. lave en lille ændring. Sæt det her array ind i starten:


$dage = array("Man","Tir","Ons","Tor","Fre","Lør","Søn");


og udskift derefter


if($y==1) $ugedag = "Man";
if($y==2) $ugedag = "Tir";
if($y==3) $ugedag = "Ons";
if($y==4) $ugedag = "Tor";
if($y==5) $ugedag = "Fre";
if($y==6) $ugedag = "Lør";
if($y==7) $ugedag = "Søn";


med dette:

$ugedag = $dage[$y-1];
Avatar billede FrederikBache Nybegynder
26. november 2009 - 18:54 #8
Det skyldes at du har 2 for løkker, du behøver kun den inderste. Dvs slet den yderste, for hvis de begge kører 7 gange, så kører den inderste 7*7 = 49 gange.

Men det ser godt ud :)

Du kunne evt opbevare dine dage i et array, som du definerer uden for løkken:

$dage = array("Man","Tir" osv.

og så inde i løkken skrive $ugedag = $dage[$y-1];
Avatar billede FrederikBache Nybegynder
26. november 2009 - 18:56 #9
Stenern... troede ikke det første svar gik igennem, nå, de er ens de to sidste svar :D
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