2013-10-05 69 views
0

我試圖生成一個平面日曆佈局的年,月和日之間的日期。它應該採用表格格式,年份排在首位,然後是以下日曆格式的每個月份。與您在甘特圖中看到的相似。生成兩個日期之間的年,月和日的平面日曆佈局

我一直在尋找一個相對簡單的,我可以使用,但無法找到一個完全相同的PHP類。

我到目前爲止所遇到的最接近的代碼如下,它顯示了一個月的時間,我該如何修改它來做我正在尋找的東西?

<?php 

$date1 = new DateTime("2007-03-24"); 
$date2 = new DateTime("2009-06-26"); 
$interval = $date1->diff($date2); 

echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; 

$date = strtotime("2007-03-24"); 

generateCalendar($date); 

function generateCalendar($date){ 

//This puts the day, month, and year in separate variables 
$day = date('d', $date) ; 
$month = date('m', $date) ; 
$year = date('Y', $date) ; 

//Here we generate the first day of the month 
$first_day = mktime(0,0,0,$month, 1, $year) ; 

//This gets us the month name 
$title = date('F', $first_day) ; 

//Here we find out what day of the week the first day of the month falls on 
$day_of_week = date('D', $first_day) ; 

echo $day_of_week; 

//Once we know what day of the week it falls on, we know how many blank days occure before it. If the first day of the week is a Sunday then it would be zero 

switch($day_of_week){ 

    case "Sun": $blank = 0; break; 

    case "Mon": $blank = 1; break; 

    case "Tue": $blank = 2; break; 

    case "Wed": $blank = 3; break; 

    case "Thu": $blank = 4; break; 

    case "Fri": $blank = 5; break; 

    case "Sat": $blank = 6; break; 

} 

//We then determine how many days are in the current month 

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

//Here we start building the table heads 

echo "<table border=1 width=294>"; 

echo "<tr><th colspan=7> $title $year </th></tr>"; 

echo "<tr><td width=42>S</td><td width=42>M</td><td 
width=42>T</td><td width=42>W</td><td width=42>T</td><td 
width=42>F</td><td width=42>S</td></tr>"; 



//This counts the days in the week, up to 7 

$day_count = 1; 



echo "<tr>"; 

//first we take care of those blank days 

while ($blank > 0) 

{ 

    echo "<td></td>"; 

    $blank = $blank-1; 

    $day_count++; 

} 

//sets the first day of the month to 1 

$day_num = 1; 



//count up the days, untill we've done all of them in the month 

while ($day_num <= $days_in_month) 

{ 

    echo "<td> $day_num </td>"; 

    $day_num++; 

    $day_count++; 



    //Make sure we start a new row every week 

    if ($day_count > 7) 

    { 

     echo "</tr><tr>"; 

     $day_count = 1; 

    } 

} 

//Finaly we finish out the table with some blank details if needed 

while ($day_count >1 && $day_count <=7) 

{ 

    echo "<td> </td>"; 

    $day_count++; 

} 


echo "</tr></table>"; 

} 
+0

這是代碼㈣瞎擺弄因此在頂部 – user794846

+0

無謂的間隔碼應如何月份的天出現? – AlexP

+0

你能告訴我們想要的輸出嗎? –

回答

1

這將生成標題爲你的餐桌:

<? 

function daysAndDaynames($datestart, $dateend) { 
    while ($datestart <= $dateend) { 
     $dateExpl=explode("-",$datestart); 
     $dayname=date("D", strtotime($datestart)); 
     $row.="<td>" . $dateExpl[2] . "</td>"; 
     $row2.="<td>" . $dayname[0] . "</td>"; 
     $datestart=date('Y-m-d', strtotime('+1 day', strtotime($datestart))); 
    } 
    return "<tr>" . $row . "</tr><tr>" . $row2 . "</tr>"; 
} 

function months($datestart, $dateend) { 
    $dateExpl=explode("-",$datestart); 
    $curMonth=$dateExpl[1]; 
    $colspan=0; 
    $monthname=date("F", strtotime($datestart)); 
    while ($datestart <= $dateend) { 
     $dateExpl=explode("-",$datestart); 
     $monthnr=$dateExpl[1]; 
     if ($curMonth <> $monthnr) { 
      $row.="<td colspan='$colspan'> $monthname</td>"; 
      $curMonth=$monthnr; 
      $monthname=date("F", strtotime($datestart)); 
      $colspan=1; 
     } else $colspan++; 
     $datestart=date('Y-m-d', strtotime('+1 day', strtotime($datestart))); 
    } 
    $row.="<td colspan='$colspan'>$monthname</td>"; 
    return "<tr>" . $row . "</tr>"; 
} 

function years($datestart, $dateend) { 
    $dateExpl=explode("-",$datestart); 
    $curYear=$dateExpl[0]; 
    $colspan=0; 
    while ($datestart <= $dateend) { 
     $dateExpl=explode("-",$datestart); 
     $yearnr=$dateExpl[0]; 
     if ($curYear <> $yearnr) { 
      $row.="<td colspan='$colspan'> $curYear</td>"; 
      $curYear=$yearnr; 
      $colspan=1; 
     } else $colspan++; 
     $datestart=date('Y-m-d', strtotime('+1 day', strtotime($datestart))); 
    } 
    $row.="<td colspan='$colspan'>$curYear</td>"; 
    return "<tr>" . $row . "</tr>"; 
} 


$datestart='2011-11-01'; 
$dateend='2013-05-15'; 


echo "<table border='1'>"; 
$row1=years($datestart, $dateend); 
$row2=months($datestart,$dateend); 
$row3=daysAndDaynames($datestart,$dateend); 

echo $row1. $row2 . $row3; 
echo "</table>"; 
相關問題