2011-04-04 113 views
0

我正在使用下面的代碼來回顯當前月份。我怎樣才能提高它,這樣是顯示所有與名稱和天數和日期的月份..用日曆回覆所有月份

代碼:一個函數中

<?php 
$today = getdate(); 
$firstDay = getdate(mktime(0,0,0,$today['mon'],1,$today['year'])); 
$lastDay = getdate(mktime(0,0,0,$today['mon']+1,0,$today['year'])); 


?> 

<?php 

echo '<table>'; 
echo ' <tr><th colspan="7">'.$today['month']." - ".$today['year']."</th></tr>"; 
echo '<tr class="days">'; 
echo ' <td>Mo</td><td>Tu</td><td>We</td><td>Th</td>'; 
echo ' <td>Fr</td><td>Sa</td><td>Su</td></tr>'; 
?> 

<?php 
echo '<tr>'; 
for($i=1;$i<$firstDay['wday'];$i++){ 
    echo '<td>&nbsp;</td>'; 
} 
$actday = 0; 
for($i=$firstDay['wday'];$i<=7;$i++){ 
    $actday++; 
    echo "<td>$actday</td>"; 
} 
echo '</tr>'; 
?> 

<?php 
$fullWeeks = floor(($lastDay['mday']-$actday)/7); 

for ($i=0;$i<$fullWeeks;$i++){ 
    echo '<tr>'; 
    for ($j=0;$j<7;$j++){ 
     $actday++; 
     echo "<td>$actday</td>"; 
    } 
    echo '</tr>'; 
    } 
    ?> 

    <?php 
    if ($actday < $lastDay['mday']){ 
    echo '<tr>'; 

    for ($i=0; $i<7;$i++){ 
     $actday++; 
     if ($actday <= $lastDay['mday']){ 
      echo "<td>$actday</td>"; 
     } 
     else { 
      echo '<td>&nbsp;</td>'; 
     } 
    } 

    echo '</tr>'; 
} 
?> 
+1

http://php.net/date或者你有什麼具體問題? – fabrik 2011-04-04 08:46:47

+0

沒問題。這段代碼很好,但我想要所有的月份,而不僅僅是當前的。 – AAA 2011-04-04 08:49:31

回答

8

試試這個:

function getDates($year) 
{ 
    $dates = array(); 

    for($i = 1; $i <= 366; $i++){ 
     $month = date('m', mktime(0,0,0,1,$i,$year)); 
     $wk = date('W', mktime(0,0,0,1,$i,$year)); 
     $wkDay = date('D', mktime(0,0,0,1,$i,$year)); 
     $day = date('d', mktime(0,0,0,1,$i,$year)); 

     $dates[$month][$wk][$day] = $wkDay; 
    } 

    return $dates; 
} 

它將返回個月 - >周 - > day->你傳遞給函數的一年平日的數組。希望遍歷數組來打印所有內容應該很容易。確保你可以做出很多調整,但這只是一個開始。例如

我也會嘗試遠離使用echo打印出html,例如,而不是;

echo '<tr>'; 
for($i=1;$i<$firstDay['wday'];$i++){ 
    echo '<td>&nbsp;</td>'; 
} 

做;

<tr>; 
<?php for($i=1;$i<$firstDay['wday'];$i++){ ?> 
    <td><?php echo $var; ?></td> 
<?php } ?> 

它使我的代碼更具可讀性。

編輯:只是想我應該包括使用情況的例子還有,如下:

<?php $dates = getDates(2011); 

$weekdays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'); ?> 
<?php foreach($dates as $month => $weeks) { ?> 
<table> 
    <tr> 
     <th><?php echo implode('</th><th>', $weekdays); ?></th> 
    </tr> 
    <?php foreach($weeks as $week => $days){ ?> 
    <tr> 
     <?php foreach($weekdays as $day){ ?> 
     <td> 
      <?php echo isset($days[$day]) ? $days[$day] : '&nbsp'; ?> 
     </td>    
     <?php } ?> 
    </tr> 
    <?php } ?> 
</table> 
<?php } ?> 

,讓你的輸出:

enter image description here

+1

只是爲了防止其他人使用它,爲了使您的示例代碼工作,您需要設置'$日期[$月] [ $ wk] [$ wkDay] = $ day;'而不是'$ dates [$ month] [$ wk] [$ day] = $ wkDay;'在你的函數中。 – javiervd 2014-10-11 21:41:59

1

總結當前的代碼,然後將參數傳遞給它與你的期望日期。

+0

我只想回應所有的月份......我找不到能做的事情,我看到與getdate相關的東西... – AAA 2011-04-04 08:57:59

+0

@AAA你能告訴我你的具體問題是什麼? – fabrik 2011-04-04 09:08:01

+0

問題是當前的代碼顯示當前月份。我想做一個在線日曆,所以我想在網站上的所有當前和未來幾個月/年.. – AAA 2011-04-04 17:13:34

5

您可以使用此功能將整個年份轉換爲陣列

function year2array($year) { 
    $res = $year >= 1970; 
    if ($res) { 
     // this line gets and sets same timezone, don't ask why :) 
     date_default_timezone_set(date_default_timezone_get()); 

     $dt = strtotime("-1 day", strtotime("$year-01-01 00:00:00")); 
     $res = array(); 
     $week = array_fill(1, 7, false); 
     $last_month = 1; 
     $w = 1; 
     do { 
     $dt = strtotime('+1 day', $dt); 
     $dta = getdate($dt); 
     $wday = $dta['wday'] == 0 ? 7 : $dta['wday']; 
     if (($dta['mon'] != $last_month) || ($wday == 1)) { 
      if ($week[1] || $week[7]) $res[$last_month][] = $week; 
      $week = array_fill(1, 7, false); 
      $last_month = $dta['mon']; 
      } 
     $week[$wday] = $dta['mday']; 
     } 
     while ($dta['year'] == $year); 
     } 
    return $res; 
    } 

叫它像所以

Array 
(
    [1] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 1 
        [7] => 2 
       ) 

      [1] => Array 
       (
        [1] => 3 
        [2] => 4 
        [3] => 5 
        [4] => 6 
        [5] => 7 
        [6] => 8 
        [7] => 9 
       ) 

      [2] => Array 
       (
        [1] => 10 
        [2] => 11 
        [3] => 12 
        [4] => 13 
        [5] => 14 
        [6] => 15 
        [7] => 16 
       ) 

      [3] => Array 
       (
        [1] => 17 
        [2] => 18 
        [3] => 19 
        [4] => 20 
        [5] => 21 
        [6] => 22 
        [7] => 23 
       ) 

      [4] => Array 
       (
        [1] => 24 
        [2] => 25 
        [3] => 26 
        [4] => 27 
        [5] => 28 
        [6] => 29 
        [7] => 30 
       ) 

      [5] => Array 
       (
        [1] => 31 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [2] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 1 
        [3] => 2 
        [4] => 3 
        [5] => 4 
        [6] => 5 
        [7] => 6 
       ) 

      [1] => Array 
       (
        [1] => 7 
        [2] => 8 
        [3] => 9 
        [4] => 10 
        [5] => 11 
        [6] => 12 
        [7] => 13 
       ) 

      [2] => Array 
       (
        [1] => 14 
        [2] => 15 
        [3] => 16 
        [4] => 17 
        [5] => 18 
        [6] => 19 
        [7] => 20 
       ) 

      [3] => Array 
       (
        [1] => 21 
        [2] => 22 
        [3] => 23 
        [4] => 24 
        [5] => 25 
        [6] => 26 
        [7] => 27 
       ) 

      [4] => Array 
       (
        [1] => 28 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [3] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 1 
        [3] => 2 
        [4] => 3 
        [5] => 4 
        [6] => 5 
        [7] => 6 
       ) 

      [1] => Array 
       (
        [1] => 7 
        [2] => 8 
        [3] => 9 
        [4] => 10 
        [5] => 11 
        [6] => 12 
        [7] => 13 
       ) 

      [2] => Array 
       (
        [1] => 14 
        [2] => 15 
        [3] => 16 
        [4] => 17 
        [5] => 18 
        [6] => 19 
        [7] => 20 
       ) 

      [3] => Array 
       (
        [1] => 21 
        [2] => 22 
        [3] => 23 
        [4] => 24 
        [5] => 25 
        [6] => 26 
        [7] => 27 
       ) 

      [4] => Array 
       (
        [1] => 28 
        [2] => 29 
        [3] => 30 
        [4] => 31 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [4] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 
        [5] => 1 
        [6] => 2 
        [7] => 3 
       ) 

      [1] => Array 
       (
        [1] => 4 
        [2] => 5 
        [3] => 6 
        [4] => 7 
        [5] => 8 
        [6] => 9 
        [7] => 10 
       ) 

      [2] => Array 
       (
        [1] => 11 
        [2] => 12 
        [3] => 13 
        [4] => 14 
        [5] => 15 
        [6] => 16 
        [7] => 17 
       ) 

      [3] => Array 
       (
        [1] => 18 
        [2] => 19 
        [3] => 20 
        [4] => 21 
        [5] => 22 
        [6] => 23 
        [7] => 24 
       ) 

      [4] => Array 
       (
        [1] => 25 
        [2] => 26 
        [3] => 27 
        [4] => 28 
        [5] => 29 
        [6] => 30 
        [7] => 
       ) 

     ) 

    [5] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 
        [7] => 1 
       ) 

      [1] => Array 
       (
        [1] => 2 
        [2] => 3 
        [3] => 4 
        [4] => 5 
        [5] => 6 
        [6] => 7 
        [7] => 8 
       ) 

      [2] => Array 
       (
        [1] => 9 
        [2] => 10 
        [3] => 11 
        [4] => 12 
        [5] => 13 
        [6] => 14 
        [7] => 15 
       ) 

      [3] => Array 
       (
        [1] => 16 
        [2] => 17 
        [3] => 18 
        [4] => 19 
        [5] => 20 
        [6] => 21 
        [7] => 22 
       ) 

      [4] => Array 
       (
        [1] => 23 
        [2] => 24 
        [3] => 25 
        [4] => 26 
        [5] => 27 
        [6] => 28 
        [7] => 29 
       ) 

      [5] => Array 
       (
        [1] => 30 
        [2] => 31 
        [3] => 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [6] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 1 
        [4] => 2 
        [5] => 3 
        [6] => 4 
        [7] => 5 
       ) 

      [1] => Array 
       (
        [1] => 6 
        [2] => 7 
        [3] => 8 
        [4] => 9 
        [5] => 10 
        [6] => 11 
        [7] => 12 
       ) 

      [2] => Array 
       (
        [1] => 13 
        [2] => 14 
        [3] => 15 
        [4] => 16 
        [5] => 17 
        [6] => 18 
        [7] => 19 
       ) 

      [3] => Array 
       (
        [1] => 20 
        [2] => 21 
        [3] => 22 
        [4] => 23 
        [5] => 24 
        [6] => 25 
        [7] => 26 
       ) 

      [4] => Array 
       (
        [1] => 27 
        [2] => 28 
        [3] => 29 
        [4] => 30 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [7] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 
        [5] => 1 
        [6] => 2 
        [7] => 3 
       ) 

      [1] => Array 
       (
        [1] => 4 
        [2] => 5 
        [3] => 6 
        [4] => 7 
        [5] => 8 
        [6] => 9 
        [7] => 10 
       ) 

      [2] => Array 
       (
        [1] => 11 
        [2] => 12 
        [3] => 13 
        [4] => 14 
        [5] => 15 
        [6] => 16 
        [7] => 17 
       ) 

      [3] => Array 
       (
        [1] => 18 
        [2] => 19 
        [3] => 20 
        [4] => 21 
        [5] => 22 
        [6] => 23 
        [7] => 24 
       ) 

      [4] => Array 
       (
        [1] => 25 
        [2] => 26 
        [3] => 27 
        [4] => 28 
        [5] => 29 
        [6] => 30 
        [7] => 31 
       ) 

     ) 

    [8] => Array 
     (
      [0] => Array 
       (
        [1] => 1 
        [2] => 2 
        [3] => 3 
        [4] => 4 
        [5] => 5 
        [6] => 6 
        [7] => 7 
       ) 

      [1] => Array 
       (
        [1] => 8 
        [2] => 9 
        [3] => 10 
        [4] => 11 
        [5] => 12 
        [6] => 13 
        [7] => 14 
       ) 

      [2] => Array 
       (
        [1] => 15 
        [2] => 16 
        [3] => 17 
        [4] => 18 
        [5] => 19 
        [6] => 20 
        [7] => 21 
       ) 

      [3] => Array 
       (
        [1] => 22 
        [2] => 23 
        [3] => 24 
        [4] => 25 
        [5] => 26 
        [6] => 27 
        [7] => 28 
       ) 

      [4] => Array 
       (
        [1] => 29 
        [2] => 30 
        [3] => 31 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [9] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 1 
        [5] => 2 
        [6] => 3 
        [7] => 4 
       ) 

      [1] => Array 
       (
        [1] => 5 
        [2] => 6 
        [3] => 7 
        [4] => 8 
        [5] => 9 
        [6] => 10 
        [7] => 11 
       ) 

      [2] => Array 
       (
        [1] => 12 
        [2] => 13 
        [3] => 14 
        [4] => 15 
        [5] => 16 
        [6] => 17 
        [7] => 18 
       ) 

      [3] => Array 
       (
        [1] => 19 
        [2] => 20 
        [3] => 21 
        [4] => 22 
        [5] => 23 
        [6] => 24 
        [7] => 25 
       ) 

      [4] => Array 
       (
        [1] => 26 
        [2] => 27 
        [3] => 28 
        [4] => 29 
        [5] => 30 
        [6] => 
        [7] => 
       ) 

     ) 

    [10] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 1 
        [7] => 2 
       ) 

      [1] => Array 
       (
        [1] => 3 
        [2] => 4 
        [3] => 5 
        [4] => 6 
        [5] => 7 
        [6] => 8 
        [7] => 9 
       ) 

      [2] => Array 
       (
        [1] => 10 
        [2] => 11 
        [3] => 12 
        [4] => 13 
        [5] => 14 
        [6] => 15 
        [7] => 16 
       ) 

      [3] => Array 
       (
        [1] => 17 
        [2] => 18 
        [3] => 19 
        [4] => 20 
        [5] => 21 
        [6] => 22 
        [7] => 23 
       ) 

      [4] => Array 
       (
        [1] => 24 
        [2] => 25 
        [3] => 26 
        [4] => 27 
        [5] => 28 
        [6] => 29 
        [7] => 30 
       ) 

      [5] => Array 
       (
        [1] => 31 
        [2] => 
        [3] => 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [11] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 1 
        [3] => 2 
        [4] => 3 
        [5] => 4 
        [6] => 5 
        [7] => 6 
       ) 

      [1] => Array 
       (
        [1] => 7 
        [2] => 8 
        [3] => 9 
        [4] => 10 
        [5] => 11 
        [6] => 12 
        [7] => 13 
       ) 

      [2] => Array 
       (
        [1] => 14 
        [2] => 15 
        [3] => 16 
        [4] => 17 
        [5] => 18 
        [6] => 19 
        [7] => 20 
       ) 

      [3] => Array 
       (
        [1] => 21 
        [2] => 22 
        [3] => 23 
        [4] => 24 
        [5] => 25 
        [6] => 26 
        [7] => 27 
       ) 

      [4] => Array 
       (
        [1] => 28 
        [2] => 29 
        [3] => 30 
        [4] => 
        [5] => 
        [6] => 
        [7] => 
       ) 

     ) 

    [12] => Array 
     (
      [0] => Array 
       (
        [1] => 
        [2] => 
        [3] => 
        [4] => 1 
        [5] => 2 
        [6] => 3 
        [7] => 4 
       ) 

      [1] => Array 
       (
        [1] => 5 
        [2] => 6 
        [3] => 7 
        [4] => 8 
        [5] => 9 
        [6] => 10 
        [7] => 11 
       ) 

      [2] => Array 
       (
        [1] => 12 
        [2] => 13 
        [3] => 14 
        [4] => 15 
        [5] => 16 
        [6] => 17 
        [7] => 18 
       ) 

      [3] => Array 
       (
        [1] => 19 
        [2] => 20 
        [3] => 21 
        [4] => 22 
        [5] => 23 
        [6] => 24 
        [7] => 25 
       ) 

      [4] => Array 
       (
        [1] => 26 
        [2] => 27 
        [3] => 28 
        [4] => 29 
        [5] => 30 
        [6] => 31 
        [7] => 
       ) 

     ) 

) 

,現在可以很容易地創建月表則需要使用這樣的事情

每月:

print_r(year2array(2011)); 

你會在源看到這(個月 - >周 - >天)

function month2table($month, $calendar_array) { 
    $ca = 'align="center"'; 
    $res = "<table cellpadding=\"2\" cellspacing=\"1\" style=\"border:solid 1px #000000;font-family:tahoma;font-size:12px;background-color:#ababab\"><tr><td $ca>Mo</td><td $ca>Tu</td><td $ca>We</td><td $ca>Th</td><td $ca>Fr</td><td $ca>Sa</td><td $ca>Su</td></tr>"; 
    foreach ($calendar_array[$month] as $month=>$week) { 
     $res .= '<tr>'; 
     foreach ($week as $day) { 
     $res .= '<td align="right" width="20" bgcolor="#ffffff">' . ($day ? $day : '&nbsp;') . '</td>'; 
     } 
     $res .= '</tr>'; 
     } 
    $res .= '</table>'; 
    return $res; 
    } 

使用這些功能就像

$calarr = year2array(2011); 
    echo month2table(1, $calarr); // January 
    echo month2table(2, $calarr); // February 
    ... 
    echo month2table(12, $calarr); // December 

..或在for循環中放入月份。

因此......例如,爲2011年1月在瀏覽器中你會看到這個

enter image description here

希望這有助於。

+0

這不起作用 – 2013-12-10 14:19:06

+0

@JohnSmith剛剛檢查過它,它的工作原理。我不知道你試過了什麼,但可能你做錯了什麼。請注意,它已經有2.5年曆史了,自從最初發布以來,PHP已經更新了很多次,也許你正面臨一些兼容性問題,但從這一點來說,我不能說你的問題出了什麼問題。它適用於我的在線和本地工作(使用兩臺不同的服務器進行測試)。 – Wh1T3h4Ck5 2013-12-10 18:03:34

+0

多數民衆贊成可能,我有一個v.uptodate PHP現在我在這裏 – 2013-12-13 21:55:27

0
$daysArr = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'); 
$monthtotdays= cal_days_in_month(CAL_GREGORIAN,date('m'),date("Y")); 
$currdays=jddayofweek (cal_to_jd(CAL_GREGORIAN, date('m'),1, date("Y")) , 2); 
$currdaysval = 0; 
echo "<table border=1px>"; 
echo "<tr>"; 
for($d=0;$d<=6;$d++){ 
echo "<td>". $daysArr[$d]."</td>"; 
if($daysArr[$d]==$currdays) $currdaysval = $d; 
} 

echo "</tr>"; 
echo "<tr>"; 
if($currdaysval > 0){ 
echo '<td colspan="'.$currdaysval.'">&nbsp;</td>'; 
} 
for($i=1;$i<=$monthtotdays;$i++){ 
echo "<td>".$i."</td>"; 
if(($i+$currdaysval)%7 <= 0){ 
echo "</tr><tr>"; 
} 
} 
echo "</tr></table>" 
1

最好的答案有一個不準確的地方!如果年份爲閏年,則應在一個週期之前添加一個條件,否則在第一個月的第一天的輸出產生問題see screenshot

的必要條件:date("L", mktime(0,0,0, 7,7, $year)) ? $days = 366 : $days = 365; (如果今年是閏年則反週期= 366其他365)