Редактировать
Я удалил предыдущий ответ ради этого, более элегантного ответа:
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
возвращает общее количество дней в данном месяце, это означает, что нам не нужно их жестко кодировать.Преимущества заключаются в високосных годах, и если дни года меняются, вам не нужно ничего менять!См. cal_days_in_month
, чтобы узнать, как использовать эту функцию.
<?=
эквивалентен <?php echo
, который намного проще писать и читать - IMO!
Единственными интересными вещами, которые я использовал, являются utf8_encode
и ucfirst
.
Преобразователь преобразует строку в UTF-8, что в наши дни является почти стандартом.Последний просто установит первую букву строки в заглавную букву.
Примечание : было бы неплохо использовать это решение для установки заглавной буквы:
$curMonth = mb_convert_case($curMonth, MB_CASE_TITLE);
Спасибо @ julp за этот ответ.
Для объяснения того, что он делает, см. Документацию для mb_convert_case
;но по сути он просто преобразует первую букву в заглавную, независимо от локали.