FrozenDate::parseDate() 不反映作为参数传递的日期

FrozenDate::parseDate() doesn't reflect the date passed as parameter

我为 FrozenDate::parseDate() 指定什么格式似乎并不重要,我总是得到相同的错误日期。

代码:

$d1 = '8/28/2021';
$d2 = '10/27/2021';
debug($d1);
debug($d2);

debug(FrozenDate::parseDate($d1, 'm/d/Y'));
debug(FrozenDate::parseDate($d2, 'm/d/Y'));
exit;

输出:

\src\Controller\AdministratorsController.php (line 559)
'8/28/2021'
\src\Controller\AdministratorsController.php (line 560)
'10/27/2021'
\src\Controller\AdministratorsController.php (line 561)
object(Cake\I18n\FrozenDate) {

    'time' => '2020-12-20 00:00:00.000000+00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false

}
\src\Controller\AdministratorsController.php (line 562)
object(Cake\I18n\FrozenDate) {

    'time' => '2020-12-20 00:00:00.000000+00:00',
    'timezone' => 'UTC',
    'fixedNowTime' => false

}

查看 API 文档,第二个参数接受:

array|string|int|null $format Any format accepted by IntlDateFormatter.

文档块也有一些示例:

$time = Time::parseDate('10/13/2013');
$time = Time::parseDate('13 Oct, 2013', 'dd MMM, y');
$time = Time::parseDate('13 Oct, 2013', IntlDateFormatter::SHORT);

所以这不是已知的语法,例如 PHP 的 date() 函数,它与 i18nFormat(), the ICU Date/Time Format Syntax 接受的语法相同,您正在寻找的模式因为将是:

M/d/y

值得注意的是,解析相当宽松,并且还依赖于语言环境。例如,虽然 M 只会格式化为没有前导零的月份,但在解析时它将接受月份作为带和不带前导零的数字,以及短月份和长月份名称(在当前语言中),这意味着所有这些实际上都可以工作(当 en 设置为语言时):

FrozenDate::parseDate('8/6/2021', 'M/d/y')
FrozenDate::parseDate('08/06/2021', 'M/d/y')
FrozenDate::parseDate('Aug/6/2021', 'M/d/y')
FrozenDate::parseDate('August/06/21', 'M/d/y')