Tid & dato - Kalender
Hej.Jeg er igang med at lave en kalender som skal vise en uge af gangen. Jeg har fundet frem til følgende løsning.
<?php
// dato og tid lige nu!
if(!isset($_GET["week"])) {
$dato = date("Y/m/d");
$day = date("d");
$month = date("m");
$year = date("Y");
}
// sidste uge i det foregående år
// tjek om det foregående år et et skudår
$last_year = $year - 1;
if(($last_year) % 4 == "0" || ($last_year - 1) % 400 == "0") {
$skudaar = "true";
} else {
$skudaar = "false";
}
if($skudaar == "true") {
$isDay = date("D", mktime(0,0,0,12,26,$last_year));
if($isDay == "Sat" || $isDay == "Sun") {
$last_week_last_year = 53;
} else {
$last_week_last_year = 52;
}
}
if($skudaar == "false") {
$isDay = date("D", mktime(0,0,0,12,27,$last_year));
if($isDay == "Sun") {
$last_week_last_year = 53;
} else {
$last_week_last_year = 52;
}
}
// sidste uge dette år
if(($year) % 4 == "0" || ($year - 1) % 400 == "0") {
$skudaar = "true";
} else {
$skudaar = "false";
}
if($skudaar == "true") {
$isDay = date("D", mktime(0,0,0,12,26,$year));
if($isDay == "Sat" || $isDay == "Sun") {
$last_week_this_year = 53;
} else {
$last_week_this_year = 52;
}
}
if($skudaar == "false") {
$isDay = date("D", mktime(0,0,0,12,27,$year));
if($isDay == "Sun") {
$last_week_this_year = 53;
} else {
$last_week_this_year = 52;
}
}
$this_week = date("W", strtotime($dato));
function getDaysInWeek ($weekNumber, $year) {
// Count from '0104' because January 4th is always in week 1
// (according to ISO 8601).
$time = strtotime($year . '0104 +' . ($weekNumber - 2) . ' weeks');
// Get the time of the first day of the week
$mondayTime = strtotime('-' . (date('w', $time) - 1) . ' days',$time);
// Get the times of days 0 -> 6
$dayTimes = array ();
for ($i = 0; $i < 7; ++$i) {
$dayTimes[] = strtotime('+' . $i . ' days', $mondayTime);
}
// Return timestamps for mon-sun.
return $dayTimes;
}
if($_GET["action"] == "prev") {
$this_week = $_GET["week"] - 1;
if($this_week < 1) {
$this_week = $last_week_last_year;
$year = $year - 1;
}
}
if($_GET["action"] == "next") {
$this_week = $_GET["week"] + 1;
if($this_week > $last_week_this_year) {
$year = $year + 1;
$this_week = 1;
}
}
// her bliver datoerne vist
$dayTimes = getDaysInWeek($this_week, $year);
foreach ($dayTimes as $dayTime) {
if((strftime('%a', $dayTime)) == "Mon") {
print "<td>Mandag ";
}
if((strftime('%a', $dayTime)) == "Tue") {
print "<td>Tirsdag ";
}
if((strftime('%a', $dayTime)) == "Wed") {
print "<td>Onsdag ";
}
if((strftime('%a', $dayTime)) == "Thu") {
print "<td>Torsdag ";
}
if((strftime('%a', $dayTime)) == "Fri") {
print "<td>Fredag ";
}
if((strftime('%a', $dayTime)) == "Sat") {
print "<td>Lørdag ";
}
if((strftime('%a', $dayTime)) == "Sun") {
print "<td>Søndag ";
}
echo ($dag . strftime('%d/%m', $dayTime) . "</td> ");
}
?>
Mit problem er så at den regner ud at sidste år 2008 havde 53 uger, men der er kun 52 uger i sidste år :) så det giver lidt problemer? Nogen der kan se sig ud af en løsning, for jeg er da ihvertfald gået i stå ;)
