2016 年的 php 日历显示正确的日期,当我将其更改为 2017 年时,它显示 1 月份的重复日期。现在我已经硬编码了 2016 年和 2017 年,稍后我会将其更改为系统日期。有人可以帮助我吗?
<?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] : ' '; ?>
</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;
}
?>
最佳答案
问题是 getDates()
中的 for
循环上升到 366。将此数字更改为 365,一切都会好起来的。
我猜这是因为 2016 年是双性交,而 2017 年不是。
您应该使用不同的方法从一年中的某天获取日期,查看这个:Php how to go from day of the year to date and vice versa
关于php - 一月份的重复天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41423331/