我的任务是为每个月的正确日期显示正确的日期。我很困惑,我真的很感谢以正确的方式提供的帮助或指示。到目前为止,由于十月是十月,所以我整天都出去玩,但是我也想将循环中的天数与正确的日期匹配。我走错路了吗?
我要做的就是在每个日期显示同一天。
$months = date("n");
$monthsDays = array (
1 => 31,
2 => 28,
3 => 31,
4 => 30,
5 => 31,
6 => 30,
7 => 31,
8 => 31,
9 => 30,
10 => 31,
11 => 30,
12 => 31
);
$day_of_the_week = array (
1 => "Måndag",
2 => "Tisdag",
3 => "Onsdag",
4 => "Torsdag",
5 => "Fredag",
6 => "Lördag",
7 => "Söndag"
);
$dayInteger = date('N', time());
echo $day_of_the_week[$dayInteger];
$day_of_the_week = date("D");
$weekNumber = date("W");
$year = date("Y");
foreach($monthsDays as $key=>$value) {
if($key == $months) {
echo date("M")."<br>";
for($i = 1; $i <= $value; $i++) {
echo '<div class="displayDate">'.$i.'</div>';
}
}
}
答案 0 :(得分:0)
尝试
echo cal_days_in_month(CAL_GREGORIAN, 8, 2018)
// 8是月份号
// 2018是年
答案 1 :(得分:0)
为此,我删除了先前的答案,这是一个更优雅的答案:
setlocale(LC_TIME, array('da_DA.UTF-8','da_DA@euro','da_DA','danish'));
$curYear = strftime('%Y');
?>
<h1><?= $curYear; ?></h1>
<?php
for ($month = 1; $month <= 12; $month++) {
$curMonth = strftime('%B', strtotime("01-{$month}-{$curYear}"));
$curMonth = ucfirst($curMonth);
$curMonth = utf8_encode($curMonth);
$totalDays = cal_days_in_month(CAL_GREGORIAN, $month, $curYear);
?>
<h2><?= $curMonth; ?></h2>
<?php for ($day = 1; $day <= $totalDays; $day++) { ?>
<?php
$monthName = ucfirst(strftime('%A', strtotime("{$day}-{$month}-{$curYear}")));
$monthName = ucfirst($monthName);
$monthName = utf8_encode($monthName);
?>
<div class="displayDate"><?= $day; ?> <?= $monthName; ?></div>
<?php } ?>
<?php } ?>
这里有很多事情,所以我会泄漏:
setlocale
是一种将语言环境设置为指定语言的功能。
第一个参数是要影响的功能,第二个参数是要更改的语言环境。就您而言,这是丹麦语。
strftime
与date
函数非常相似,不同之处在于它将以语言环境设置的语言返回日期。
在那之后,它实际上只是迭代了几天又几个月。
设置$curMonth
时,我使用strtotime
,以便可以操纵它以指定的语言提取该日期。最初,我使用DateTime::createFromFormat
,但是不尊重通过setlocale
设置的语言环境,这就是为什么我使用此 hack 的原因。
$totalDays
将返回给定月份的总天数,这意味着我们不必对它们进行硬编码。考虑到leap年的优势,并且如果一年中的日子发生变化,您无需进行任何更改!有关如何使用此功能的信息,请参见cal_days_in_month
。
<?=
等效于<?php echo
,这更加容易编写和阅读-IMO!
我使用的其他唯一有趣的东西是utf8_encode
和ucfirst
。
前者会将字符串转换为UTF-8,这几乎是当今的标准。后者只会将字符串的第一个字母设置为大写字母。
注意:使用此解决方案设置大写字母可能是一个好主意:
$curMonth = mb_convert_case($curMonth, MB_CASE_TITLE);
感谢@julp的回答。
有关其功能的说明,请参见mb_convert_case
的文档;但是从本质上讲,它将仅将首字母转换为大写字母,而不管其语言环境如何。