使用 DateTime::createFromFormat() 而不滚动(错误的)日期
Using DateTime::createFromFormat() without rolling the (wrong) date
让错误的日期58/57/5654
(或58.57.5654
)用一组语言中的一种语言书写,其中日期的书写方式不同(例如: 法语日期、英语日期和德语日期)。我想通过传递语言的日期格式和这个错误的日期来调用 DateTime::createFromFormat()
,目的是根据语言检索错误(或正确)的日、月和年。
示例。
法国用户写了58/57/5654
(或58.57.5654
)。所以我想得到:(day, month, year) = (58, 57, 5654)
英文用户写了同样的日期。我会得到:(day, month, year) = (57, 58, 5654)
.
对于德语,它与法语相同。
问题
使用,DateTime::createFromFormat($the_format, $the_date);
如果给定的值错误,将对日期的日、月和年值执行滚动。例如:string(10) "58/57/5654"
变成正确的, 但不想要的 ,日期 string(10) "28/10/5658"
.
我怎样才能避免这个卷?
参见:https://secure.php.net/manual/fr/datetime.createfromformat.php
我不确定是否可以禁用此功能,但如果发生这种情况,您可以检查:
$date = \DateTimeImmutable::createFromFormat($format, $dateString);
if(!$date || ($date->format($format) !== $dateString)) {
throw new InvalidDateException($dateString);
}
我们在这里所做的是检查提供的日期字符串与从该日期字符串创建的日期,这将向我们表明 'rollover' 是否如您所说的那样发生了。
这需要一些调整才能适用于您的代码库,但希望这能为您提供一些开始工作的通用方法?
让错误的日期58/57/5654
(或58.57.5654
)用一组语言中的一种语言书写,其中日期的书写方式不同(例如: 法语日期、英语日期和德语日期)。我想通过传递语言的日期格式和这个错误的日期来调用 DateTime::createFromFormat()
,目的是根据语言检索错误(或正确)的日、月和年。
示例。
法国用户写了
58/57/5654
(或58.57.5654
)。所以我想得到:(day, month, year) = (58, 57, 5654)
英文用户写了同样的日期。我会得到:
(day, month, year) = (57, 58, 5654)
.对于德语,它与法语相同。
问题
使用,DateTime::createFromFormat($the_format, $the_date);
如果给定的值错误,将对日期的日、月和年值执行滚动。例如:string(10) "58/57/5654"
变成正确的, 但不想要的 ,日期 string(10) "28/10/5658"
.
我怎样才能避免这个卷?
参见:https://secure.php.net/manual/fr/datetime.createfromformat.php
我不确定是否可以禁用此功能,但如果发生这种情况,您可以检查:
$date = \DateTimeImmutable::createFromFormat($format, $dateString);
if(!$date || ($date->format($format) !== $dateString)) {
throw new InvalidDateException($dateString);
}
我们在这里所做的是检查提供的日期字符串与从该日期字符串创建的日期,这将向我们表明 'rollover' 是否如您所说的那样发生了。
这需要一些调整才能适用于您的代码库,但希望这能为您提供一些开始工作的通用方法?