没有 strftime(已弃用)但有日期的本地语言

local language without strftime (deprecated) but with date

所以,我在 strftime() 被弃用之前使用了这段代码:

setlocale(LC_TIME, IT);
echo "<p>" . strftime("%A %e %h %Y", strtotime($value)) . "</p>";

现在,使用 date() 和相同的代码输出不会改变语言。

setlocale(LC_TIME, 'it_IT.utf8');
echo "<p>" . date("l d M Y", strtotime($value)) . "</p>";

**忽略变量 $value

我在 date() 上看不到 setlocale(LC_TIME, 'IT')setlocale(LC_TIME, 'it_IT.utf8') 之间的区别...但是 strftime() 仅适用于 setlocale(LC_TIME, 'IT') 而不是第二个一个

有什么想法吗?

date() function use format accepted by DateTimeInterface::format()方法。

方法DateTimeInterface::format() 不使用语言环境。所有输出均为英文。
所以,这意味着 date() 函数也不使用语言环境。

测试:

setlocale(LC_ALL, 'IT.utf8');
echo date('l', time()).'<br>';// display Friday

setlocale(LC_ALL, 'fr');
echo date('l', time()).'<br>';// display Friday

setlocale(LC_ALL, 'th');
echo date('l', time()).'<br>';// display Friday

所有区域显示相同:星期五

strftime() 已弃用。

用语言环境(可能包括时区)替代显示 date/time 的是什么?
IntlDateFormatter 是最好的选择。

来自您之前的代码:

setlocale(LC_TIME, 'IT.utf8');
echo "<p>" . strftime("%A %e %h %Y", time()) . "</p>";// display venerdì 15 apr 2022

您现在可以使用:

$fmt = new IntlDateFormatter('IT',
    IntlDateFormatter::FULL, 
    IntlDateFormatter::FULL
);
$fmt->setPattern('EEEE d LLL yyyy');
echo $fmt->format(time());// display venerdì 15 apr 2022

格式将使用 setPattern() 方法,可能的模式记录在 https://unicode-org.github.io/icu/userguide/format_parse/datetime/