本地语言,不带 strftime(已弃用),但带日期

Zam*_*bon 1 php time multilingual date

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

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

strftime() 输出

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

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

日期()输出

**忽略变量$value

我没有看到setlocale(LC_TIME, 'IT')两者setlocale(LC_TIME, 'it_IT.utf8')之间的差异date()...但strftime()仅适用于setlocale(LC_TIME, 'IT')而不是第二个

有任何想法吗?

vee*_*vee 5

date()接受的函数使用格式DateTimeInterface::format()

\n

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

\n

测试:

\n
setlocale(LC_ALL, \'IT.utf8\');\necho date(\'l\', time()).\'<br>\';// display Friday\n\nsetlocale(LC_ALL, \'fr\');\necho date(\'l\', time()).\'<br>\';// display Friday\n\nsetlocale(LC_ALL, \'th\');\necho date(\'l\', time()).\'<br>\';// display Friday\n
Run Code Online (Sandbox Code Playgroud)\n

所有区域设置都显示相同的内容:星期五

\n

strftime()已弃用。

\n

用区域设置(可能包括时区)来替代显示日期/时间的是什么?
\n的IntlDateFormatter是最好的选择。

\n

从你之前的代码来看:

\n
setlocale(LC_TIME, \'IT.utf8\');\necho "<p>" . strftime("%A %e %h %Y", time()) . "</p>";// display venerd\xc3\xac 15 apr 2022\n
Run Code Online (Sandbox Code Playgroud)\n

您现在可以使用:

\n
$fmt = new IntlDateFormatter(\'IT\',\n    IntlDateFormatter::FULL, \n    IntlDateFormatter::FULL\n);\n$fmt->setPattern(\'EEEE d LLL yyyy\');\necho $fmt->format(time());// display venerd\xc3\xac 15 apr 2022\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n