示例代码:
$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都不会导致所需的输出。
我特别想要一个“完整”的,但不是年度部分。
请不要建议任何试图“破解”一年的解决方案,比如string/regexp-删除它。我需要解决方案,以使发动机不包括年度部分的输出。我相信其他地区的年份比我所用的两个地区要复杂得多。
发布于 2021-09-17 21:53:23
每个地区都将定义自己的日期格式,其内容和顺序也会有所不同。要么您需要为所有用户定义一个单一的模式,要么允许用户从列表中选择他们想要的模式,或者做您似乎不想做的事情,并解析/修改区域设置的模式。
没有一个现成的解决方案可以简单地自动完成您想要的输出。
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"https://stackoverflow.com/questions/69228978
复制相似问题