示例代码:
$a = new IntlDateFormatter('en-US', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/London', IntlDateFormatter::GREGORIAN);
var_dump($a->format(strtotime('2021-09-17 15:00')));
$a = new IntlDateFormatter('sv-SE', IntlDateFormatter::FULL, IntlDateFormatter::NONE, 'Europe/London', IntlDateFormatter::GREGORIAN);
var_dump($a->format(strtotime('2021-09-17 15:00')));
实际产量:
string(26) "Friday, September 17, 2021"
string(24) "fredag 17 september 2021"
想要的输出:
string(26) "Friday, September 17"
string(24) "fredag 17 september"
将
IntlDateFormatter::FULL
更改为 IntlDateFormatter::LONG
没有帮助。它只会产生这样的输出:
string(18) "September 17, 2021"
string(17) "17 september 2021"
IntlDateFormatter::NONE
、IntlDateFormatter::SHORT
和IntlDateFormatter::MEDIUM
都不会产生所需的输出。
我特别想要“完整”的,但不是年份部分。
请不要提出任何试图“破解”年份的解决方案,例如字符串/正则表达式删除它。我需要解决方案使引擎在输出中不包含年份部分。我确信其他语言环境比我用作示例的两个语言环境有更复杂/不同的年份部分。
没有一个现有的解决方案可以简单地自动完成您想要的输出。
https://www.php.net/manual/en/intldateformatter.setpattern.php
https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
$d = new DateTime('2021-09-17 15:00');
$fmt_en = new IntlDateFormatter('en-US', IntlDateFormatter::NONE, IntlDateFormatter::NONE);
$fmt_en->setPattern('EEEE, MMMM d');
$fmt_sv = new IntlDateFormatter('sv-SV', IntlDateFormatter::NONE, IntlDateFormatter::NONE);
$fmt_sv->setPattern('MMMM d, EEEE');
var_dump(
$fmt_en->format($d),
$fmt_sv->format($d)
);
输出:
string(20) "Friday, September 17"
string(20) "september 17, fredag"
$formatter = match ($lang) {
'en' => new \IntlDateFormatter($lang, pattern: 'EEEE, MMMM d'),
'sv' => new \IntlDateFormatter($lang, pattern: 'MMMM d, EEEE'),
default => new \IntlDateFormatter($lang, \IntlDateFormatter::FULL, \IntlDateFormatter::NONE),
};
$date = $formatter->format($datetime);