Avatar billede the_edge Nybegynder
15. november 2006 - 09:33 Der er 20 kommentarer og
1 løsning

kalender vil skifte måned.

hejsa hvordan får jeg lavet en function så jeg kan skifte måned frem og tilbage ?

echo "<table border=\"1\" name=\"kalender\"><tr>";



for($d = 1; $d <= 31; $d++) {

    if((($d-1) % 7 == 0) && ($d > 1)) {  //hver gang der er talt til 7 laver den <tr>
   
        echo '</tr><tr>';
  }
  $moned = mktime(0,0,0,date("m"),date("$d"),date("Y"));
 
  echo '<td>';
 
  echo date($d)." er ".date("d/m/y/", $moned);
 
  echo '</td>';
}
echo "</tr></table>";

echo("<br />");
Avatar billede kinderaeg Nybegynder
15. november 2006 - 09:45 #1
Kan fx laves noget i stil med nedenstående:

if(empty($_GET["month"])) {
  $month = date("m");
} else {
  $month = $_GET["month"];
}

echo '<a href="?month='.$month-1.'">Month - 1</a> - <a href="?month='.$month+1.'">Month + 1</a>';

echo "<table border=\"1\" name=\"kalender\"><tr>";

for($d = 1; $d <= 31; $d++) {
  if((($d-1) % 7 == 0) && ($d > 1)) {  //hver gang der er talt til 7 laver den <tr>
    echo '</tr><tr>';
  }
  $moned = mktime(0,0,0,$month,date("$d"),date("Y"));
  echo '<td>';
  echo date($d)." er ".date("d/m/y/", $moned);
  echo '</td>';
}
echo "</tr></table>";
echo("<br />");
Avatar billede the_edge Nybegynder
15. november 2006 - 10:02 #2
jeg går en felj på linje  echo '<a href="?month='.$month-1.'">Month - 1</a> - <a href="?month='.$month+1.'">Month + 1</a>';
Avatar billede net-base.dk Nybegynder
15. november 2006 - 10:16 #3
Hvad er fejlen?
Avatar billede kinderaeg Nybegynder
15. november 2006 - 10:29 #4
PHP har åbenbart lidt problemer med at regne midt i en udskrift, sæt parantes omkring de udtryk der skal beregnes, så går det:

echo '<a href="?month='.($month - 1).'">Month - 1</a> - <a href="?month='.($month + 1).'">Month + 1</a>';

Og så skal du selvfølgelig nok finde ud af, hvor mange dage der er i de pågældende måneder ;)
Avatar billede the_edge Nybegynder
15. november 2006 - 10:37 #5
ahh okay... kan du forklare hvad den linje gør ? echo '<a href="?month='.($month - 1).'">Month - 1</a> - <a href="?month='.($month + 1).'">Month + 1</a>';
Avatar billede kinderaeg Nybegynder
15. november 2006 - 11:48 #6
Tjah, den laver to links, et der sender dig en måned tilbage ($month - 1) og et der sender dig en måned frem ($month + 1). Det gøres ved at sende en parameter på linket til samme side. Hvis du har flere parametre i forvejen, skal du selvfølgelig sætte dem på også.

'<a href="?month=' //er ren html. Der linker til samme side, blot med parameteren month

.($month - 1). //parameteren sættes til måneden før denne

'">Month - 1</a>' //teksten på linket sættes

Det samme foretages for det andet link. Du skal selvfølgelig også være opmærksom på, at når du når til henholdsvis måned 1 og 12, skal du fortsætte i det næste år og skrive måneden tilbage til den modsatte grænse (fx hvis du står i januar, skal forrige måned ikke være 0, men måned 12, året før, så det kan måske være en idé at sende året med også.
Avatar billede the_edge Nybegynder
15. november 2006 - 12:07 #7
okay smart.

ja altså, det det gerne skulle munde ud i var at. at man trykke på en bestemt dato, og så går den frem til en anden side der f.eks hedder viskalender.php og på den skal man få vidst hvad der sker den dag. Det kunne være smart at lægge både dag måned og år op i browseren så man kan sortere på det. har du nogen forslag på det ?
Avatar billede kinderaeg Nybegynder
15. november 2006 - 12:55 #8
Så er du vel ude i noget sådant:

if(empty($_GET["month"])) {
  $month = date("m");
} else {
  $month = $_GET["month"];
}

if(empty($_GET["year"])) {
  $year = date("Y");
} else {
  $year = $_GET["year"];
}

if($month==1) {
  echo '<a href="?month=12&amp;year='.($year - 1).'">Month - 1</a>';
} else {
  echo '<a href="?month='.($month - 1).'&amp;year='.$year.'">Month - 1</a>';
}
echo ' - ';
if($month==12) {
  echo '<a href="?month=1&amp;year='.($year + 1).'">Month + 1</a>';
} else {
  echo '<a href="?month='.($month + 1).'&amp;year='.$year.'">Month + 1</a>';
}

echo "<table border=\"1\" name=\"kalender\"><tr>";

for($d = 1; $d <= 31; $d++) {
  if((($d-1) % 7 == 0) && ($d > 1)) {  //hver gang der er talt til 7 laver den <tr>
    echo '</tr><tr>';
  }
  $moned = mktime(0,0,0,$month,date("$d"),$year);
  echo '<td><a href="viskalender.php?year='.$year.'&amp;month='.$month.'&amp;day='.$d.'">';
  echo date($d)." er ".date("d/m/y/", $moned);
  echo '</a></td>';
}
echo "</tr></table>";
echo("<br />");
Avatar billede kinderaeg Nybegynder
15. november 2006 - 13:21 #9
Og så skal du lige ha' den til at tage højde for antal dage i måneden og hvilken dag måneden starter:

function dayofweek($year, $month, $day) {
  $days = array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
  return array_search(date("D", mktime(0,0,0,$month,$day,$year)), $days) + 1;
}

if(empty($_GET["month"])) {
  $month = date("m");
} else {
  $month = $_GET["month"];
}

if(empty($_GET["year"])) {
  $year = date("Y");
} else {
  $year = $_GET["year"];
}

if($month==1) {
  echo '<a href="?month=12&amp;year='.($year - 1).'">Month - 1</a>';
} else {
  echo '<a href="?month='.($month - 1).'&amp;year='.$year.'">Month - 1</a>';
}
echo ' - ';
if($month==12) {
  echo '<a href="?month=1&amp;year='.($year + 1).'">Month + 1</a>';
} else {
  echo '<a href="?month='.($month + 1).'&amp;year='.$year.'">Month + 1</a>';
}

echo "<table border=\"1\" name=\"kalender\">";
echo '<tr><th>Mandag</th><th>Tirsdag</th><th>Onsdag</th><th>Torsdag</th><th>Fredag</th><th>Lørdag</th><th>Søndag</th></tr>';
echo '<tr>';

$d=1;
for($i = 1; $i <= (date("t", mktime(0,0,0,$month,1,$year))+dayofweek($year, $month, 1)-1); $i++) {
  if($i < dayofweek($year, $month, 1)) {
    echo '<td>&nbsp;</td>';
  } else {
    if((($i-1) % 7 == 0) && ($i > dayofweek($year, $month, 1))) {  //hver gang der er talt til 7 laver den <tr>
      echo '</tr><tr>';
    }
    $moned = mktime(0,0,0,$month,$d,$year);
    echo '<td><a href="viskalender.php?year='.$year.'&amp;month='.$month.'&amp;day='.$d.'">';
    echo date($d)." er ".date("d/m/y/", $moned);
    echo '</a></td>';
    ++$d;
  }
}
echo "</tr></table>";
echo("<br />");
Avatar billede the_edge Nybegynder
15. november 2006 - 14:13 #10
det er rigtigt godt :)hvad gør denne linje ? for($i = 1; $i <= (date("t", mktime(0,0,0,$month,1,$year))+dayofweek($year, $month, 1)-1); $i++). og function dayofweek ?
Avatar billede kinderaeg Nybegynder
15. november 2006 - 14:20 #11
Den løber igennem månedens dage, plus dem der skal sættes ind først, for at kalenderen starter på den rigtige dag.

Altså:
(date("t", mktime(0,0,0,$month,1,$year)) //er antallet af dage i måneden
dayofweek($year, $month, 1) //er den dag, måneden starter
-1 //og så trækker vi en dag fra, for det er kun dagene før første dag, der skal tælles med

Funktionen dayofweek er defineret i toppen af scriptet og finde ud af, hvilken ugedag, en given dato er. Hvis du kører PHP5.1 eller større, kan du skifte den ud med date("N", mktime(0,0,0,$month,1,$year))
Avatar billede the_edge Nybegynder
15. november 2006 - 19:47 #12
ahh okay tak for hjælpen... hvis du lægger et svar så er der point igen :) Kan man gøre sådan så oppe i URLen så skriver den dd-mm-åååå så ville det være letter når jeg skulle connecte til databasen og hente data ud ?
Avatar billede the_edge Nybegynder
16. november 2006 - 08:26 #13
når men smid et svar kinderaeg så er der point.
Avatar billede kinderaeg Nybegynder
16. november 2006 - 08:57 #14
Man kan lave så meget. Jeg endte med at lave en version du kan se på http://h-larsen.dk/test/calendar/ og hente koden på http://h-larsen.dk/test/calendar/calendar.zip

Svar ;)
Avatar billede the_edge Nybegynder
16. november 2006 - 10:35 #15
nice mange tak skal du have :D kan du fortælle mig hvorfor den ikke smider dage antal med 2 cifre op i URLen ? det er det sidste jeg mangler :)
Avatar billede kinderaeg Nybegynder
16. november 2006 - 10:58 #16
Nu er jeg ikke sikker på, hvad du mener med "dage antal med 2 cifre", men jeg kunne forestille mig, at det har noget at gøre med <a href="viskalender.php?year='.$year.'&amp;month='.$month.'&amp;day='.$d.'">, som kun skriver day som 9 og ikke 09. Det kan du fx gøre som følger:

$tmp = $d<10?'0'.$d:$d;
echo '<td class="lb bb'.$rb.'"><a href="viskalender.php?year='.$year.'&amp;month='.$month.'&amp;day='.$tmp.'">';
Avatar billede the_edge Nybegynder
16. november 2006 - 12:03 #17
tak skal du have var det jeg mente :) arbejder du med det til hverdag syndes du er rimelige god :)
Avatar billede kinderaeg Nybegynder
16. november 2006 - 13:13 #18
Næh, tøffer rundt i det engang imellem, når jeg har fri. Startede for et års tid siden, så jeg skulle mene at alle skulle ha' en chance for at blive gode til php ;)

Trial & error kommer man langt med. Har altid haft den filosofi, at man lærer mindst lige så meget ved at forsøge og ramme forkert, som ved at læse en masse, så det er bare et spørgsmål og at komme igang og kode, så skal du nok blive skarp ;)
Avatar billede the_edge Nybegynder
16. november 2006 - 13:22 #19
:) det håber jeg i hvert fald... syndes bare tit ikke men gider hvis man sider ved den samme fejl i lang tid...
Avatar billede kinderaeg Nybegynder
16. november 2006 - 13:36 #20
Så er det jo godt vi har eksperten ;)
Avatar billede kinderaeg Nybegynder
16. november 2006 - 14:02 #21
Og så skal du i øvrigt nok lige være opmærksom på, at der ikke findes en name-attribute på table, hvis din kode skal valideres i henhold til w3.org, men det ser ikke ud til du bruger den til andet end at give dig selv et overblik, så det er bare at arkivere den lodret (attributten altså, ikke tabellen ;)
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