2017-01-02 6 views
3

2016年のPHPカレンダーが正しい日を示しています。これを2017に変更すると、1月の繰り返し月が表示されます。今、私は2016年と2017年をハードコードしました。後でこれをシステム日付に変更します。誰か助けてください?1月の月の重複日数

<?php 
    $dates = getDates(date("Y")); //gets system default date, if i change this to date(2016) works fine, when i change to 2017 it shows repeated days entry for january month. 

    $weekdays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'); //prints weeks. 
    $monthPrints = array('01'=>'January','02'=>'February','03'=>'March','04'=>'April','05'=>'May','06'=>'June','07'=>'July','08'=>'August','09'=>'September','10'=>'October','11'=>'November','12'=>'December'); ?> // prints month string. 

<?php foreach($dates as $month => $weeks) { ?> 
    <?php print_r($monthPrints[$month]); ?> 
    <table id="<?= $month ?>">  
     <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 }?> 
    <?php 
    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][$wkDay] = $day; 
     } 

     return $dates; 
    } 
?> 

enter image description here

答えて

2

問題がgetDates()forサイクルは365に366の変更までこの番号を行くと、すべてがうまくなることです。 2016はbissextileだったのですが、2017はそうではないと思います。

年末の日付を取得するには、別のものを使用する必要があります。Php how to go from day of the year to date and vice versa

関連する問題