Avatar billede klaske_ko Nybegynder
30. november 2007 - 01:03 Der er 23 kommentarer og
1 løsning

Hvad skal jeg bruge få at lave en kalender i php? no-downloads

Godaften,
Jeg har prøvet i et par dage nu, at lave min egen kalender, som trækker data ud fra mysql, viser datoen, dagens navn, og evt ugenummer. Plus at der skal laves sådan en kommentar.

Jeg har fundet en kalender der virker på samme måde:
http://www.wannasave.com/konto/kalender/

Jeg har fået datoen, jeg har fået opstillingen, men jeg kan ikke få den til at skifte dagens navn og lave noget ugenummer ved hver mandag. :(

Jeg vil gerne hvis folk kan skrive hvad jeg kan gøre, som udgangspunkt eller linke til noget jeg kan bruge :)

Mit eget ser således ud : http://mesmerize.dk/kalender/

Koden er:
<?
//Sættes til at være en dansk kalender
setlocale(LC_ALL,'da_DK.ISO8859-1');

//Laver dagen i dag
$dato = time () ;

//Ligger dag, måned og år i forskellige variabler
$dag = date('d', $dato) ;
$maned = date('m', $dato) ;
$ar = date('Y', $dato) ;

//Her laves den første dag i måneden
$forste_dag = mktime(0,0,0,$maned, 1, $ar) ;

//Og her gives månedends navn
$titel = date('F', $forste_dag) ;

//Her findes ud af hvilken dag i ugen den første dag falder på i måneden
$dag_i_ugen = date('D', $forste_dag) ;

//Bestemmelse af hvor mange dage der er i den pågældende måned
$dag_i_maned = cal_days_in_month(0, $maned, $ar) ;

//Og jeg udskriver månedens navn og årstal her
echo "<br><strong>$titel $ar</strong><br><br>";

//Her skrives dagens navn
$dag_navn = strftime("%A");

//Det her tæller dagene i ugen op til syv
$tael_dag = 1;

//Sætter den første dag i måneden til 1
$dag_nummer = 1;

//Tæller alle dagene op i en måned
while ( $dag_nummer <= $dag_i_maned ){
echo "<table width='400' border='0'><b><font size='2' style='color: 000000; height: 1px;'>$dag_nummer - $dag_navn</table></font></b><br>";

$dag_nummer++;
$tael_dag++;
}
show_source(__FILE__);
?>
Avatar billede dumbledore Nybegynder
30. november 2007 - 01:25 #1
i selve mySQL kan du vel sætte en fremmednøgle til en anden tabel, som gør at hver gang det er mandag, skal den også hente de oplysninger frem som f.eks. uge nr.  - mener godt det kan lade sig gøre i selve MySQL'en .. hm
Avatar billede klaske_ko Nybegynder
30. november 2007 - 01:31 #2
Ja okay. Men der jeg sidder fast lige nu, er (hvis du kigger på mit link http://kalender.mesmerize.dk) at den skal finde ud af at den første november var en torsdag - Den skal automatisk finde ud af hvilken dag den 1 i måneden er.. I stedet for bare at skrive fredag hele vejen ned :(
Avatar billede coderdk Praktikant
30. november 2007 - 02:31 #3
PHP5.1: date("N", $dindato) returnerer 1 for mandag og 7 for søndag - Andre versioner: date("w", $dindato) returnerer 0 for søndag, 1 for mandag og 6 for lørdag
Avatar billede klaske_ko Nybegynder
30. november 2007 - 02:38 #4
Jeg har prøvet.. :

//Her findes ud af hvilken dag i ugen den første dag falder på i måneden
$dag_i_ugen = date('N', $forste_dag) ;

Men så udskriver den bare N'er hele vejen ned :(
Avatar billede klaske_ko Nybegynder
30. november 2007 - 02:40 #5
Sådan her :
1 - N
2 - N
3 - N
4 - N
5 - N
Avatar billede klaske_ko Nybegynder
30. november 2007 - 04:38 #6
Update : Jeg har fået dato tælleren og dagens navn til at virke nu ;)

Hvordan laver jeg en slags if sætning der siger

If(mandag) { echo "jeg viser et uge nummer :)"; } else { skriv intet }
Avatar billede coderdk Praktikant
30. november 2007 - 09:31 #7
så bruger du en PHP version mindre end 5.1 altså skal du bruge "w"

i.e. if ( date("w", $dindato) == 1 ) { // skriv ugenummer }
Avatar billede klaske_ko Nybegynder
30. november 2007 - 14:48 #8
//Bestemmelse af ugenummer
$uge = date('W', $dato);

if ( date("w", $navn) == 1) { echo "$uge"; }

jeg kan sgu ikke få det til at virke
Avatar billede klaske_ko Nybegynder
30. november 2007 - 15:06 #9
Så ;D nu fik jeg den :  if ( $navn == 'Man' ) { echo "$uge"; }

Men der står 48 ved dem alle, hvordan får jeg den til at tælle ?
Avatar billede coderdk Praktikant
30. november 2007 - 15:40 #10
$din_tid = time();
echo strftime("%V", $din_tid);

Skriver den aktuelle uge ud ;)
Avatar billede klaske_ko Nybegynder
30. november 2007 - 16:50 #11
jo jo :) men det gør date('W', $dato); også, problemet er bare at den skal skrive

48 ved mandag i uge 48, 49 ved mandag i uge 49 - lige nu skriver den bare 48 ved alle mandagerne
Avatar billede coderdk Praktikant
30. november 2007 - 21:59 #12
$uge = date('W', $dato);

if ( date("w", $navn) == 1) { echo "$uge"; }


skal vel være

$uge = date('W', $navn);

if ( date("w", $navn) == 1) { echo "$uge"; }


Du er jo nødt til at bruge samme timestamp-variabel :)
Avatar billede klaske_ko Nybegynder
01. december 2007 - 05:58 #13
Hvis jeg bruger :
$uge = date('W', $navn);

if ( date("w", $navn) == 1) { echo "$uge"; }

Skriver den (istedet for uge 48,48,48,48 hele vejen ned) bare 01, 01, 01, 01 =(
Avatar billede klaske_ko Nybegynder
01. december 2007 - 06:09 #14
Det virker slet ikke, det var fordi jeg ikke fik ændret det $dato til $navn - Det gider bare ikke virker :/
Avatar billede coderdk Praktikant
01. december 2007 - 16:59 #15
Vi skal nok se noget kode ;)
Avatar billede klaske_ko Nybegynder
01. december 2007 - 17:53 #16
oh.. det ligger inde i linket, men 2 sekunder så ;)

<?
//Sættes til at være en dansk kalender
setlocale(LC_ALL,'da_DK.ISO8859-1');

//Laver dagen i dag
$dato = time () ;

//Ligger dag, måned og år i forskellige variabler
$dag = date('d', $dato) ;
$maned = date('m', $dato) ;
$ar = date('Y', $dato) ;

//Her laves den første dag i måneden
$forste_dag = mktime(0,0,0,$maned, 1, $ar);

//Og her gives månedends navn
$titel = date('F', $forste_dag) ;

//Bestemmelse af hvor mange dage der er i den pågældende måned
$dag_i_maned = cal_days_in_month(0, $maned, $ar) ;

//Og jeg udskriver månedens navn og årstal her
echo "<br><strong>$titel $ar</strong><br><br>";

//Sætter den første dag i måneden til 1
$dag_nummer = 1;

//Bestemmelse af ugenummer
$uge = date('W', $navn);

//Uge dage
function getday($num) {
  switch($num) {
  case 0: return "Søn"; break;
  case 1: return "Man"; break;
  case 2: return "Tir"; break;
  case 3: return "Ons"; break;
  case 4: return "Tor"; break;
  case 5: return "Fre"; break;
  case 6: return "Lør"; break;
  default: return "Søn"; break;
  }
}

//Udskriver dage og tæller op til månedens slutning
while ( $dag_nummer <= $dag_i_maned ){
$navn = getday(date('w', $dag_navn));
echo "<table width='400' cellspacing='0' cellpadding='0' style='border-bottom:1px:gray'><tr>
    <td width='50' align='center'><font size='4' color='#0033CC'><b>$navn</b></font></td>
    <td width='60' align='center' style='border-right:1px:gray'><font size='4' color='#0033CC'><b>$dag_nummer</b></font></td>
    <td width='240' align='center'><i>Dagens aftale</i></td>
    <td width='50' align='right'><font size='4' color='#999999'><b>";
if ( date("w", $navn) == 1) { echo "$uge"; }
echo "</b></font></td></tr></table>";
   
$dag_navn = ($dag_navn+86400);
$dag_nummer++;
$tael_dag++;
}
?>

Der ;)
Avatar billede klaske_ko Nybegynder
01. december 2007 - 18:01 #17
Har lige opdaget en fejl mere, som jeg ikke kan se hvordan jeg løser - Den tæller dagene som den skal fra 1-31 i den her måned, men den starter ugen (tors) d.1 (det er november der starter sådan) hvad kan tænkes er skyld i det?
Avatar billede coderdk Praktikant
01. december 2007 - 18:47 #18
Har kigget lidt i koden - Den er lidt rodet, men dette ser ud til at virke:

<?php

//Sættes til at være en dansk kalender
setlocale(LC_ALL,'da_DK.ISO8859-1');

//Laver dagen i dag
$dato = time () ;

//Ligger dag, måned og år i forskellige variabler
$dag = date('d', $dato) ;
$maned = date('m', $dato) ;
$ar = date('Y', $dato) ;

//Her laves den første dag i måneden
$forste_dag = mktime(0,0,0,$maned, 1, $ar);

//Og her gives månedends navn
$titel = date('F', $forste_dag) ;

//Bestemmelse af hvor mange dage der er i den pågældende måned
$dag_i_maned = date("d", mktime(0, 0, 0, $maned+1, 0, $ar) )+0;

//Og jeg udskriver månedens navn og årstal her
echo "<br><strong>$titel $ar</strong><br><br>";

//Sætter den første dag i måneden til 1
$dag_nummer = 1;

//Bestemmelse af ugenummer
$uge = date('W', $navn);

//Udskriver dage og tæller op til månedens slutning
$akt_dag = $forste_dag;
while ( $dag_nummer <= $dag_i_maned )
{
    $navn = ucfirst(strftime("%a", $akt_dag));
    echo "<table width='400' cellspacing='0' cellpadding='0' style='border-bottom:1px:gray'><tr>
        <td width='50' align='center'><font size='4' color='#0033CC'><b>$navn</b></font></td>
        <td width='60' align='center' style='border-right:1px:gray'><font size='4' color='#0033CC'><b>$dag_nummer</b></font></td>
        <td width='240' align='center'><i>Dagens aftale</i></td>
        <td width='50' align='right'><font size='4' color='#999999'><b>";
    if ( date("w", $akt_dag) == 1) { echo strftime("%V", $akt_dag); }
    echo "</b></font></td></tr></table>";
    $akt_dag += 86400;
    $dag_nummer++;
}

?>
Avatar billede klaske_ko Nybegynder
01. december 2007 - 19:02 #19
Ja for satan, det virker sgu ;) mange tak..  Du må undskylde min kode, men jeg har ikke programmeret i lang tid :)
Avatar billede klaske_ko Nybegynder
01. december 2007 - 19:10 #20
Smid et svar så får du dine points :) - Så vil jeg gå i gang med at se hvad forskellen er fra min til din kode ;)

- Hvis jeg åbner et spørgsmål mere, kan du lære mig hvordan man laver Next funktioner ?
Avatar billede klaske_ko Nybegynder
01. december 2007 - 19:15 #21
Lige et spørgsmål :) hvorfor skifter du mellem strftime(); og date(); ? Jeg har fået at vide de gør det samme :S
Avatar billede coderdk Praktikant
01. december 2007 - 21:52 #22
strftime's %V var tidligere forskellig fra date's W - men jeg tror nu at de opfører sig ens nu (specielt med setlocale)... Det er bare en vane at jeg stadig bruger strftime :)
Avatar billede coderdk Praktikant
01. december 2007 - 21:55 #23
Oh, ja, strftime("%a") skriver ugenavnet, i det sprog du har angivet i setlocale - Det mener jeg ikke date gør!
Avatar billede vallus Nybegynder
25. maj 2011 - 10:41 #24
Hej, hvordan sætter man kalenderen ind i databasen ?
Er der nogen der vil hjælpe mig .. har kodet men er usikker i hvad det skal stå i databasen =) ?
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