2016-06-17 4 views
0

今月のカレンダーを作成しようとしていて、最後の行の残りの日を次の月と前の月の日付で埋めています。暦月の前日の表示方法は?

私はそれが次の月の日付を表示するように管理しました。問題は、前の月の日付も表示する必要があることです。

誰かが問題を把握している場合は、その問題の内容を修正してどのように修正したかを追加してください。

カレンダーの画像も追加します。

Image

スクリプト:あなたは$week_day_firstを計算

<table cellspacing="0" cellpadding="0" border="0" width="100%" class="view-calendar"> 
<tr> 
<td valign="top" width="14.2857%">Mondag</td> 
<td valign="top" width="14.2857%">Tuesday</td> 
<td valign="top" width="14.2857%">Wednesday</td> 
<td valign="top" width="14.2857%">Thursday</td> 
<td valign="top" width="14.2857%">Friday</td> 
<td valign="top" width="14.2857%">Saturday</td> 
<td valign="top" width="14.2857%">Sunday</td> 
</tr> 

<?php 
// Get current month dates 
$days_count = date('t'); 
$current_day = date('d'); 
$week_day_first = date('N', mktime(0, 0, 0, date('m'), 1, date('Y'))); 

// Get previous month dates 

// Get next month dates 
$next_start = strtotime(date("Y-m-00", strtotime("+1 month"))); 
$next_dates = array(); 

for ($w = 1 - $week_day_first + 1; $w <= $days_count; $w = $w + 7){ 
    echo '<tr>'; 
    $counter = 0; 
    for ($d = $w; $d <= $w + 6; $d++){ 
     if($d < 10){ 
     $current_date = date("Y").date("m").'0'.$d; 
     }else{ 
     $current_date = date("Y").date("m").$d; 
     } 
     echo '<td valign="top" width="14.2857%"'.(($d > 0 ? ($d > $days_count ? ' class="disabled"' : '') : ' class="disabled"')).(($counter > 4 ? ' class="week-day"' : '')).'>'; 
     if($d > 0){ 
     if($d > $days_count){ 
      for($in = 1; $in <= 1; $in++){ 
      echo array_push($next_dates, date('j', strtotime("+ $in day", $next_start))); 
      } 
     }else if($current_day == $d){ 
      echo '<div class="current-day"><span class="given-date">'.$d.'</span></div>'; 
     }else{ 
      echo '<span class="given-date">'.$d.'</span>'; 
     } 
     }else{ 
     //Here comes previous dates 
     } 
     echo '</td>'; 
     $counter++; 
    } 
    echo '</tr>'; 
} 
?> 
</table> 
+0

*「このセクションを完了してください:* '//前月の日付を取得してください」? –

+0

6月のように空のボックスに以前の日付を表示するにはどうすればいいですか?30日と31日を表示したい場合はどうすればいいですか? @JeffPuckettII – Tweath

+0

OK、その行に30と31を入力したいだけです。それははるかに明確な感謝です –

答えて

1

、あなたは変数に月の最初の日から計算されたあなたの時間を節約することができます。

$time_first_day_of_month = mktime(0, 0, 0, date('m'), 1, date('Y')); 

次に、月の初め前のオフセットを計算するために後で再利用することができます。

一緒にすべてを置く
date('d', strtotime("$offset day",$time_first_day_of_month)) 

:この出力の

<table cellspacing="0" cellpadding="0" border="0" width="100%" class="view-calendar"> 
<tr> 
<td valign="top" width="14.2857%">Mondag</td> 
<td valign="top" width="14.2857%">Tuesday</td> 
<td valign="top" width="14.2857%">Wednesday</td> 
<td valign="top" width="14.2857%">Thursday</td> 
<td valign="top" width="14.2857%">Friday</td> 
<td valign="top" width="14.2857%">Saturday</td> 
<td valign="top" width="14.2857%">Sunday</td> 
</tr> 

<?php 
// Get current month dates 
$days_count = date('t'); 

$current_day = date('d'); 

// save time of first day for later use 
$time_first_day_of_month = mktime(0, 0, 0, date('m'), 1, date('Y')); 
$week_day_first = date('N', $time_first_day_of_month); 

// Get next month dates 
$next_start = strtotime(date("Y-m-00", strtotime("+1 month"))); 

$next_dates = array(); 

for ($w = 1 - $week_day_first + 1; $w <= $days_count; $w = $w + 7){ 
    echo '<tr>'; 
    $counter = 0; 
    for ($d = $w; $d <= $w + 6; $d++){ 
     if($d < 10){ 
     $current_date = date("Y").date("m").'0'.$d; 
     }else{ 
     $current_date = date("Y").date("m").$d; 
     } 
     echo '<td valign="top" width="14.2857%"'.(($d > 0 ? ($d > $days_count ? ' class="disabled"' : '') : ' class="disabled"')).(($counter > 4 ? ' class="week-day"' : '')).'>'; 
     if($d > 0){ 
     // next month's dates 
     if($d > $days_count){ 
      for($in = 1; $in <= 1; $in++){ 
      echo array_push($next_dates, date('j', strtotime("+ $in day", $next_start))); 
      } 
     } 
     // today 
     else if($current_day == $d){ 
      echo '<div class="current-day"><span class="given-date">'.$d.'</span></div>'; 
     } 
     // this month's dates 
     else{ 
      echo '<span class="given-date">'.$d.'</span>'; 
     } 
     } 
     // last month's dates 
     else{ 
     //Here comes previous dates 
     $offset = $d - 1; 
     echo '<span class="given-date">'.date('d', strtotime("$offset day",$time_first_day_of_month)).'</span>'; 
     } 
     echo '</td>'; 
     $counter++; 
    } 
    echo '</tr>'; 
} 
?> 
</table> 

結果:

<table cellspacing="0" cellpadding="0" border="0" width="100%" class="view-calendar"> 
 
<tr> 
 
<td valign="top" width="14.2857%">Mondag</td> 
 
<td valign="top" width="14.2857%">Tuesday</td> 
 
<td valign="top" width="14.2857%">Wednesday</td> 
 
<td valign="top" width="14.2857%">Thursday</td> 
 
<td valign="top" width="14.2857%">Friday</td> 
 
<td valign="top" width="14.2857%">Saturday</td> 
 
<td valign="top" width="14.2857%">Sunday</td> 
 
</tr> 
 

 
<tr><td valign="top" width="14.2857%" class="disabled"><span class="given-date">30</span></td><td valign="top" width="14.2857%" class="disabled"><span class="given-date">31</span></td><td valign="top" width="14.2857%"><span class="given-date">1</span></td><td valign="top" width="14.2857%"><span class="given-date">2</span></td><td valign="top" width="14.2857%"><span class="given-date">3</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">4</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">5</span></td></tr><tr><td valign="top" width="14.2857%"><span class="given-date">6</span></td><td valign="top" width="14.2857%"><span class="given-date">7</span></td><td valign="top" width="14.2857%"><span class="given-date">8</span></td><td valign="top" width="14.2857%"><span class="given-date">9</span></td><td valign="top" width="14.2857%"><span class="given-date">10</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">11</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">12</span></td></tr><tr><td valign="top" width="14.2857%"><span class="given-date">13</span></td><td valign="top" width="14.2857%"><span class="given-date">14</span></td><td valign="top" width="14.2857%"><span class="given-date">15</span></td><td valign="top" width="14.2857%"><span class="given-date">16</span></td><td valign="top" width="14.2857%"><div class="current-day"><span class="given-date">17</span></div></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">18</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">19</span></td></tr><tr><td valign="top" width="14.2857%"><span class="given-date">20</span></td><td valign="top" width="14.2857%"><span class="given-date">21</span></td><td valign="top" width="14.2857%"><span class="given-date">22</span></td><td valign="top" width="14.2857%"><span class="given-date">23</span></td><td valign="top" width="14.2857%"><span class="given-date">24</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">25</span></td><td valign="top" width="14.2857%" class="week-day"><span class="given-date">26</span></td></tr><tr><td valign="top" width="14.2857%"><span class="given-date">27</span></td><td valign="top" width="14.2857%"><span class="given-date">28</span></td><td valign="top" width="14.2857%"><span class="given-date">29</span></td><td valign="top" width="14.2857%"><span class="given-date">30</span></td><td valign="top" width="14.2857%" class="disabled">1</td><td valign="top" width="14.2857%" class="disabled" class="week-day">2</td><td valign="top" width="14.2857%" class="disabled" class="week-day">3</td></tr></table>

+0

基本的に私が月の最初の日を保存したら、簡単に保存できましたか? – Tweath

+0

ほとんどの場合、yes、 '$ d'オフセットを-1とした相対日付形式を使用します。 –

+0

@ P.Samuel btw、私はこれが本当に好きです。私はしばらくの間それを作る必要があったが、それをオフにしている - コードのためにありがとう:) –

0

をここでそれはかなり読みやすくDateTimeクラスを使用するコードは、あります:

$today = new DateTime('today'); // only change this line to test other months 
$this_month = $today->format('M'); 
$date = clone $today; 
$date->modify('first day of this month')->modify('+1 day')->modify('last Monday'); 
do { 
    echo '<tr>'; 
    for ($weekday = 0; $weekday < 7; $weekday++){ 
     $out = str_replace($this_month, '', $date->format('M')); 
     $content = "<span class='given-date'>$out {$date->format('d')}</span>"; 
     if ($today == $date) $content = "<div class='current-day'>$content</div>"; 
     $class = ($out ? 'disabled ' : '') . ($weekday > 4 ? 'week-day' : ''); 
     echo "<td valign='top' width='14.2857%' class='$class'>$content</td>"; 
     $date->modify('+1 day'); 
    } 
    echo '</tr>'; 
} while ($date->format('M') == $this_month); 
+0

ええ、これには、次の月と前の月の3桁の文字は含まれていません。 – Tweath

+0

3桁の月プレフィックスを追加しました。しかし、受け入れられた答えにはそれらも含まれていないことに注意してください。その答えには2桁の日数も表示されません。今月の週末以外に週末のクラスを適用したくないのではないかと思います。私はもっ​​と論理的だったように、これをやった。 – trincot

関連する問題