Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:08 Der er 29 kommentarer og
1 løsning

Drilsk Kalender.

Hey Eksperter.

jeg har følgende kode;

<html>
<head>
<title>PHP Calendar</title>

<script language="javascript">
<!--
var hojde="300"
var bredde="300"
var scroll="no"
var resize="no"
var toolbar="no"
var location="no"
var directories="no"
var status="no"
var menubar="no"
var centrer="yes" // "yes" centrerer
var LeftPosition="10"
var TopPosition="10"
var win = null;

function NewWindow(mypage,navn){
if (centrer=="yes") {
  LeftPosition = (screen.width) ? (screen.width-bredde)/2 : 0;
  TopPosition = (screen.height) ? (screen.height-hojde)/2 : 0;
}
settings =
'toolbar='+toolbar+',location='+location+',directories='+ directories+',status='+status+',menubar='+menubar+', height='+hojde+',width='+bredde+',top='+TopPosition+ ',left='+LeftPosition+',scrollbars='+scroll+',resizable=' +resize
win = window.open(mypage,navn,settings)
}
-->
</script>

<style type="text/css">
<!--
.table.calendar {border: 1px solid #000000; border-collapse: collapse; color: #000000; background: #FFFFFF; }
.td.today { border: 1px solid white; color: #000000; background: #9EC3D4; font-weight: bold; font-size: 12px; }
.td.monthdays {border: 1px solid #434470; color: #000000; background: #9EC3D4; font-size: 14px; }
.td.week_num { background: #BCCED7; font-size: 14px; }
.td.nonmonthdays { border: 1px solid white; color: #000000; background: #DFDFDF; font-size: 12px; }
.td.monthname { font-size: 14px; }
A:link, A:active, A:visited { text-decoration: none; color: black; font-size: 12px; }
A:hover { text-decoration: underline ]
-->
</style>
<body>

<?php
error_reporting('0');
ini_set('display_errors', '0');

$userid = "1234567890";

if(!isset($_REQUEST['date'])){
  $date = mktime(0,0,0,date('m'), date('d'), date('Y'));
} else {
  $date = $_REQUEST['date'];
}

$day = date('d', $date);
$month = date('m', $date);
$year = date('Y', $date);

$month_start = mktime(0,0,0,$month, 1, $year);
$month_name = date('F', $month_start);
$month_start_day = date('D', $month_start);

switch($month) {
    case "01": $month_name = "Januar"; break;
    case "02": $month_name = "Februar"; break;
    case "03": $month_name = "Marts"; break;
    case "05": $month_name = "Maj"; break;
    case "06": $month_name = "Juni"; break;
    case "07": $month_name = "Juli"; break;
    case "10": $month_name = "Oktober"; break;
}

switch($month_start_day){
    case "Mon": $offset = 0; break;
    case "Tue": $offset = 1; break;
    case "Wed": $offset = 2; break;
    case "Thu": $offset = 3; break;
    case "Fri": $offset = 4; break;
    case "Sat": $offset = 5; break;
    case "Sun": $offset = 0; break;
}

if($month == 1){
  $num_days_last = cal_days_in_month(0, 12, ($year -1));
} else {
  $num_days_last = cal_days_in_month(0, ($month -1), $year);
}

$num_days_current = cal_days_in_month(0, $month, $year);

for($i = 1; $i <= $num_days_current; $i++){
    $num_days_array[] = $i;
}

for($i = 1; $i <= $num_days_last; $i++){
    $num_days_last_array[] = $i;
}

if($offset > 0){
    $offset_correction = array_slice($num_days_last_array, -$offset, $offset);
    $new_count = array_merge($offset_correction, $num_days_array);
    $offset_count = count($offset_correction);
}
else {
    $offset_count = 0;
    $new_count = $num_days_array;
}

$current_num = count($new_count);

if($current_num > 35){
  $num_weeks = 6;
  $outset = (42 - $current_num);
} elseif($current_num < 35){
  $num_weeks = 5;
  $outset = (35 - $current_num);
}
if($current_num == 35){
  $num_weeks = 5;
  $outset = 0;
}

for($i = 1; $i <= $outset; $i++){
  $new_count[] = $i;
}

$weeks = array_chunk($new_count, 7);

$previous_link = "<a href=\"".$_SERVER['PHP_SELF']."?date=";
if($month == 1){
  $previous_link .= mktime(0,0,0,12,$day,($year -1))."&userid=$userid";
} else {
  $previous_link .= mktime(0,0,0,($month -1),$day,$year)."&userid=$userid";
}
$previous_link .= "\"><< Forrige</a>";

$next_link = "<a href=\"".$_SERVER['PHP_SELF']."?date=";
if($month == 12){
  $next_link .= mktime(0,0,0,1,$day,($year + 1))."&userid=$userid";
} else {
  $next_link .= mktime(0,0,0,($month +1),$day,$year)."&userid=$userid";
}
$next_link .= "\">Næste >></a>";

echo "<table border=\"1\" cellpadding=\"2\" cellspacing=\"0\" width=\"300\" class=\"calendar\">\n".
    "<tr>\n".
    "<td colspan=\"8\">\n".
    "<table align=\"center\">\n".
    "<tr>\n".
    "<td colspan=\"3\" width=\"75\" align=\"left\">$previous_link</td>\n".
    "<td colspan=\"4\" width=\"150\" align=\"center\" class=\"monthname\">$month_name $year</td>\n".
    "<td colspan=\"3\" width=\"75\" align=\"right\">$next_link</td>\n".
    "</tr>\n".
    "</table>\n".
    "</td>\n".
    "<tr class=\"monthdays\">\n".
    "<td></td><td>Man</td><td>Tirs</td><td>Ons</td><td>Tors</td><td>Fre</td><td>Lør</td><td>Søn</td>\n".
    "</tr>\n";
   
$i = 0;

$week_num = date("W", $date);

foreach($weeks AS $week){
      echo "<tr><td class=\"week_num\">".$week_num++."\n";
      foreach($week as $d){
        if($i < $offset_count){
            $day_link = "&nbsp;";
            echo "<td class=\"nonmonthdays\">$day_link</td>\n";
        }
        if(($i >= $offset_count) && ($i < ($num_weeks * 7) - $outset)){
            $day_link = "<a href=\"".$_SERVER['PHP_SELF']."?date=".mktime(0,0,0,$month,$d,$year)."&userid=$userid\" onclick=\"NewWindow('popup.php?date=".mktime(0,0,0,$month,$d,$year)."&userid=$userid','mitvindue');return false\">$d</a>";
          if($date == mktime(0,0,0,$month,$d,$year)){
              echo "<td class=\"today\">$d</td>\n";
          } else {
              echo "<td class=\"days\">$day_link</td>\n";
          }
        } elseif(($outset > 0)) {
            if(($i >= ($num_weeks * 7) - $outset)){
              $day_link = "&nbsp;";
              echo "<td class=\"nonmonthdays\">$day_link</td>\n";
          }
        }
        $i++;
      }
      echo "</tr>\n";   
}

echo '<tr><td colspan="7" class="days"> </td></tr>';
echo '</table>';
?>
</body>
</html>


1.) Kunne godt tænke mig at uge numrene siden virkede. ;)
Hvis jeg hopper til Januar 2006, så er første uge nummer 52 og sidste er 56. :(
I februar starter den så i uge 5.

Aner ikke hvad problemet er.

2.) Kunne godt tænke mig at det kun er den nuværende dato der er markeret. f.eks. idag, 31.07.05 er markeret, men hvis man hopper til December, så skal der ikke være nogen dato markeret.

Nogle bud?
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:12 #1
I stedet for bare at tælle op: $week_num++ kan du jo aflæse den hver gang, som du allerede gør: $week_num = date("W", $date);  hvor $date så skal ændres i hvert gennemløb
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:14 #2
okey der tabte du mig totalt, kan du komme med et eksempel?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:15 #3
ahh forstod den nu. ;)

hvad  mener du med at date skal ændres?
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:21 #4
Blot at når du kommer til en ny uge, skal din dato tælles 7 dage op - ellers vil date("W",...) ikke give det rigtige.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:22 #5
jamen det giver det rigtige pånær i januar måned, som den eneste... ?
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:23 #6
Ja, men så er den jo også forkert. Er det ikke det du vil have rettet?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:25 #7
jo tak, men er slet ikke med på hvad det er du vil have mig til. :(
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:27 #8
Jeg vil da gerne gentage det: Aflæse ugenummeret fra PHP med date("W",...) hver gang du har brug for det. Så får du det rigtige. Som du kan se er det forkert blot at lægge een til hver gang.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:29 #9
okey så langt så godt, men hvordan?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:31 #10
har smidt

echo "<tr><td class=\"week_num\">".date("W", mktime(0,0,0,$month,$d,$year))."\n";
det hjælper lidt på problemet, men slet ikke nok...
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:33 #11
"hjælper lidt"? Du skal sørge for at det er en ny dato i hver uge.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:34 #12
okey...

Hvordan?
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 15:38 #13
Øhm, ja, ved at tælle et eller andet op. Jeg ved ikke om jeg kan hjælpe dig mere, uden ligefrem at lave det for dig ;) Det gider jeg ikke...
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 15:40 #14
okey mine egen egenskaber hvad angår dato'er osv er knap så skarpe. :(

Så har brug for alt den hjælp jeg kan få her.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:06 #15
okey har også set at den fucker hele scriptet op nu, pga at jeg har mandag først... istedet for søndag... :(
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:22 #16
Mandag er først i uger i vores del af verden.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:26 #17
switch($month_start_day){
    case "Mon": $offset = 0; break;
    case "Tue": $offset = 1; break;
    case "Wed": $offset = 2; break;
    case "Thu": $offset = 3; break;
    case "Fri": $offset = 4; break;
    case "Sat": $offset = 5; break;
    case "Sun": $offset = 0; break;
}


ja?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:27 #18
fejl fundet....

case "Sun": $offset = 0; break;  <-- :(
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:29 #19
og så virker uge numerne præcist som jeg havde lavet dem... ikke altid at 1 januar er uge 1. :)
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:29 #20
så mangler jeg bare:

2.) Kunne godt tænke mig at det kun er den nuværende dato der er markeret. f.eks. idag, 31.07.05 er markeret, men hvis man hopper til December, så skal der ikke være nogen dato markeret.
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:31 #21
Nej, det er bestemt ikke altid uge 1. Man kan jo bemærke at i USA har de en lidt anden måde at beregne ugenumre på. Nogle gange er der overensstemmelse med vores, den rigtige, måde at gøre det på. Andre gange afviger det lidt. Det er noget man skal være opmærksom på hvis man laver aftaler med folk derovre.
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:32 #22
Er det den der hedder $day_link ?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:34 #23
nej det er de forgående uger.

vi skal have fat i:

  if($date == mktime(0,0,0,$month,$d,$year)){
    echo "<td class=\"today\">$d</td>\n";
  }
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:36 #24
Ja, s'fø'li'. Nu kører jeg ikke din kode, så hvad er det der sker i december?
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:38 #25
når jeg starter op, starter den i Juli som den skal.

trykker jeg så på Næste for at hoppe til August, så markere den 31 August til at være den nuværende dag. :(
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:39 #26
sidder og tænker på noget ala.

Hvis dato'en er lig med time() så skal det være markeret,
ellers skal det ikke være markeret.

Men det lader til at den ikke rigtigt vil forstå det, selv om jeg truer den med Shift+Delete. :(
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:40 #27
Hm, ja, du har nogle linier med

$day = date('d', $date);
$month = date('m', $date);
$year = date('Y', $date);

som vel ikke er dags dato, men det det angives i url-en. Du skal vel blot have

$day1 = date('d');
$month1 = date('m');
$year1 = date('Y');

og sammenligne med dem i stedet for ( ... måske ... *g* )
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:44 #28
Baaaaaaaaaaaaaaaaaah!!!!!!!!!!!!! :P :P :P :P

tilføjede:

$day1 = date('d');
$month1 = date('m');
$year1 = date('Y');

og så:

now = mktime(0,0,0,$month1,$day1,$year1);

og til sidst ændrede jeg:

if($date == mktime(0,0,0,$month,$d,$year)){
til
if($now == mktime(0,0,0,$month,$d,$year)){

:P

smid et svar. ;) ;) ;)
Avatar billede erikjacobsen Ekspert
31. juli 2005 - 16:58 #29
Jah, det må være det.

Jeg samler slet ikke på point, tak. Svar selv, accepter eget svar.
Avatar billede blackscorpion Nybegynder
31. juli 2005 - 16:59 #30
okey så mangler jeg bare at smede det hele sammen i noget grumt bruger kontrolleret halløj. ;)
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