2011-04-04 76 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)