自 php8.0+ 起,
str_replace()
等多个函数不再接受“null”参数。
我从 php 7.4 升级。
就我而言,我使用 WordPress,函数 str_replace 主要用于将日期转换为法语。
我决定停止使用 str_replace 来翻译日期。
在 php7.4 中,为了显示接下来十二个月中每个月对应的帖子,我使用了以下代码
setlocale(LC_TIME, 'fr_FR');
date_default_timezone_set('Europe/Paris');
for ($x = $currentMonth; $x < $currentMonth + 12; $x++) {
$months[] = date('Y-F-m', mktime(0, 0, 0, $x, 1));
}
$FrenchMonth = array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
$EnglishMonth = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
之后我将每个月(“F”日期格式)转换为我的当地语言
$twelvemonthsdata = explode('-',$months[$i]);
$twelvemonthsM = $twelvemonthsdata[1];
$twelveFormatMonth = 'F';
$twelvemonthinfrench = str_replace( $EnglishMonth,$FrenchMonnth, date($twelveFormatMonth, strtotime($twelvemonthsM)));
今天,在 php8.0+ 中,我调整了我的代码,但除了使用
strtotime()
转换“for”循环的结果并使用 DateTime()
和 intldateformatter()
使用它之外,我找不到任何其他方法。
$currentMonth = 日期('m');
for ($x = $currentMonth; $x < $currentMonth + 12; $x++) {
$eachmonth = strtotime(Date('Y-F-m', mktime(0, 0, 0, $x, 1)));
$tweelvemonths = new DateTime();
$tweelvemonths->setTimestamp($eachmonth);
$tweelvemonths_formatter = new IntlDateFormatter('fr_FR');
$tweelvemonths_formatter->setTimeZone('Europe/Paris');
$tweelvemonths_formatter->setPattern('y-MMMM-MM');
$tweelvemonths_formated = $tweelvemonths_formatter->format($tweelvemonths);
var_dump($tweelvemonths_formated);
}
是否有更简单或更短的方法可以使用或不使用 strtotime 和/或 mtkime 以当地语言生成从当前月份开始的接下来的 12 个月?
我分享我自己的答案。
因此,在不使用
date()
和 mtkime()
的情况下,我检索当前月份的十二个月。
为此,我们需要在循环之前实例化 dateTime,并从 1 个月递减到当前月份,而不是 DateTime“修改”属性生成的下一个
$test->modify('+1 month')
。
对于每个循环,我们将 DateTime 增加到 +1 个月。
intlDateFormatter 负责格式化日期并翻译它
$now = Date('m');
$test = new DateTime('first day of this month - 1 month');
for ($x = $now ; $x < $now + 12 ; $x++) {
$test->modify('+1 month');
$use_formatter = new IntlDateFormatter('fr_FR');
$use_formatter->setTimeZone('Europe/Paris');
$use_formatter->setPattern('y-MMMM-MM');
$formated = $use_formatter->format($test);
var_dump($formated);
}