以 php 中月份数组的特定格式显示日期
display a date in particular format from month array in php
我有一个 php 代码,如下所示,其中有一组法国月份。
<?php
$months = array(
1 => "janvier",
2 => "février",
3 => "mars",
4 => "avril",
5 => "mai",
6 => "juin",
7 => "juillet",
8 => "août",
9 => "septembre",
10 => "octobre",
11 => "novembre",
12 => "décembre",
);
?>
问题陈述:
我想要实现的是我想以下列格式显示日期:
08 août 2020
对于该月的第一天,将 er 附加到数字:
e.g. 1er août 2020
这是我试过的。虽然它以 Line A prints 08 août 2020
的形式工作,但我想知道它是否适用于所有情况。这里的所有情况是指一个月中的所有天数。
我已经硬编码了 Z 行的值,但它会改变。
<?php
$months = array(
1 => "janvier",
2 => "février",
3 => "mars",
4 => "avril",
5 => "mai",
6 => "juin",
7 => "juillet",
8 => "août",
9 => "septembre",
10 => "octobre",
11 => "novembre",
12 => "décembre",
);
$this_date="2020-08-08"; // Line Z
$this_time = strtotime($this_date);
$day = date('d', $this_time);
$month = date('n', $this_time);
$month_fr = $months[$month];
$suffix = $day == 1 ? 'er' : '';
$formatted_new_fr = strftime("%d$suffix " . $month_fr . " %Y", $this_time);
echo $formatted_new_fr; // Line A
?>
PHP 为您服务:)
setlocale(LC_TIME, 'fr_FR');
$dateString = '2020-08-08';
$timestamp = strtotime($dateString);
$formattedDate = strftime('%d %B %Y', $timestamp);
//setlocale(LC_ALL, Locale::getDefault()); // restore (if neccessary)
echo utf8_encode($formattedDate);
输出
08 août 2020
工作example。
要获得 1er
日,您可以做您已经做过的事情。只需拆分 strftime(或其结果)。
参考资料
另一种解决方案(尽管会按顺序显示所有日期)
$locale = 'fr_FR';
$dateString = '2020-08-01';
$date = new DateTimeImmutable($dateString);
$dateFormatter = new IntlDateFormatter(
$locale,
IntlDateFormatter::FULL,
NULL
);
$numberFormatter = new NumberFormatter($locale, NumberFormatter::ORDINAL);
$ordinalDay = $numberFormatter->format($date->format('d'));
$dateFormatter->setPattern('LLLL Y');
echo $ordinalDay . ' ' . $dateFormatter->format($date->getTimestamp());
输出
1er août 2020
工作example。
参考资料
我有一个 php 代码,如下所示,其中有一组法国月份。
<?php
$months = array(
1 => "janvier",
2 => "février",
3 => "mars",
4 => "avril",
5 => "mai",
6 => "juin",
7 => "juillet",
8 => "août",
9 => "septembre",
10 => "octobre",
11 => "novembre",
12 => "décembre",
);
?>
问题陈述:
我想要实现的是我想以下列格式显示日期:
08 août 2020
对于该月的第一天,将 er 附加到数字:
e.g. 1er août 2020
这是我试过的。虽然它以 Line A prints 08 août 2020
的形式工作,但我想知道它是否适用于所有情况。这里的所有情况是指一个月中的所有天数。
我已经硬编码了 Z 行的值,但它会改变。
<?php
$months = array(
1 => "janvier",
2 => "février",
3 => "mars",
4 => "avril",
5 => "mai",
6 => "juin",
7 => "juillet",
8 => "août",
9 => "septembre",
10 => "octobre",
11 => "novembre",
12 => "décembre",
);
$this_date="2020-08-08"; // Line Z
$this_time = strtotime($this_date);
$day = date('d', $this_time);
$month = date('n', $this_time);
$month_fr = $months[$month];
$suffix = $day == 1 ? 'er' : '';
$formatted_new_fr = strftime("%d$suffix " . $month_fr . " %Y", $this_time);
echo $formatted_new_fr; // Line A
?>
PHP 为您服务:)
setlocale(LC_TIME, 'fr_FR');
$dateString = '2020-08-08';
$timestamp = strtotime($dateString);
$formattedDate = strftime('%d %B %Y', $timestamp);
//setlocale(LC_ALL, Locale::getDefault()); // restore (if neccessary)
echo utf8_encode($formattedDate);
输出
08 août 2020
工作example。
要获得 1er
日,您可以做您已经做过的事情。只需拆分 strftime(或其结果)。
参考资料
另一种解决方案(尽管会按顺序显示所有日期)
$locale = 'fr_FR';
$dateString = '2020-08-01';
$date = new DateTimeImmutable($dateString);
$dateFormatter = new IntlDateFormatter(
$locale,
IntlDateFormatter::FULL,
NULL
);
$numberFormatter = new NumberFormatter($locale, NumberFormatter::ORDINAL);
$ordinalDay = $numberFormatter->format($date->format('d'));
$dateFormatter->setPattern('LLLL Y');
echo $ordinalDay . ' ' . $dateFormatter->format($date->getTimestamp());
输出
1er août 2020
工作example。