我正在使用下面的函数计算从出生日期(欧洲格式DD/MM/YYYY)算起的人的年龄(以年为单位),这些日期作为文本存储在Wordpress高级自定义字段中
function get_age($birthDate_old) {
$birthDate = ($birthDate_old);
return date_diff(new DateTime($birthDate), new DateTime('today'))->y;
}
在大多数情况下,它工作正常,但在某些情况下,我得到以下错误:
Fatal error: Uncaught Exception: DateTime::__construct(): Failed to parse time string (26/01/1958) at position 0 (2): Unexpected character in /home/XXXX/functions.php:99 Stack trace: #0 /home/XXXX/functions.php(99): DateTime->__construct('26/01/1958') #1 /home/XXXX/single.php(69): get_age('26/01/1958') #2 /home/XXX/wp-includes/template-loader.php(98): include('/home/XXX/...') #3 /home/XXX/wp-blog-header.php(19): require_once('/home/XXX/...') #4 /home/XXX/index.php(17): require('/home/monmaire/...') #5 {main} thrown in /home/XXXX/functions.php on line 99
工作正常的数据示例:$age=get_age($birthday);
对于$birth value=05/04/1946,它可以正常工作,但是对于$birth value=26/01/1958,我得到了上面的错误。我不明白为什么,因为在我看来,这两个案例中的数据是相同的格式。
你知道为什么吗?
谢谢当做
问题是日期格式。我相信你在“/”和“-”之间切换。如果您正在处理大型数据,则很难修复整个数据库,因此我最好的建议是preg_replace,以确保您从用户/数据库中获取的数据格式正确。找到下面的示例代码。
function get_age($birthDate_old) {
$birthDate = ($birthDate_old);
return date_diff(new DateTime($birthDate), new DateTime('today'))->y;
}
$birthDate = "26/01/1958";
$birthDate = preg_replace("(/)", "-", $birthDate);
echo get_age($birthDate);
我希望有帮助!让我知道
据此:
https://www.php.net/manual/en/datetime.formats.php
// THIS IS INVALID, WOULD IMPLY MONTH == 19
$external = "19/10/2016 14:48:21";
// HOWEVER WE CAN INJECT THE FORMATTING WHEN WE DECODE THE DATE
$format = "d/m/Y H:i:s";
$dateobj = DateTime::createFromFormat($format, $external);
$iso_datetime = $dateobj->format(Datetime::ATOM);
echo "SUCCESS: $external EQUALS ISO-8601 $iso_datetime";
26被视为一个月。因此,添加$format=“d/m/Y”
到您的日期,如上所述。
我这样修复你的函数:
function get_age($birthDate_old) {
return date_diff(
DateTime::createFromFormat('d/m/Y', $birthDate_old),
new DateTime('today')
)->y;
}
在你的情况下,你的日期是格式错误的,因为DateTime构造函数不知道你是通过一个月还是一天。
1946年4月5日可以。
1958年1月26日不正常,因为默认情况下26代表月份。
昨天我在一个网站上工作,我们将使用。它工作得很好等等。然而,当我现在启动它,我得到一个错误... 我们从另一个网站获得信息,该网站发布的日期如下: 2016-30-24T11:30:00.000 01:00 然而,我们只想展示: 11:30:00 小时、分钟和秒。 我们采用以下方法: 这是昨天的工作,但现在我得到以下错误: 致命错误:未捕获异常'异常'与消息'DateTime::__constru
我得到这个错误 (!)致命错误:未捕获异常'异常'与消息'DateTime::__construct():未能解析时间字符串(06-28-2014 07:43:58 )在位置0(0):意外字符'在 /Users/matt/Desktop/Likes/forgot/activate.php第17行 当你试图这么做的时候 第17行是
我已经研究过关于同一错误的其他问题,但我很难将它们应用到我的情况中。 这是我得到的错误: 致命错误:未捕获异常“exception”,消息为“DateTime::u-construct()[DateTime.-construct]:无法分析位置10(1)处的时间字符串(2013-07-22164:50:00):在/Applications/XAMPP/xamppfiles/htdocs/Festi
我如何解决这个问题。 这是我的网站 这是完全的错误。 致命错误:未捕获的异常“exception”,消息为“DateTime::\u构造():无法分析位置0(0)处的时间字符串(03-22-2016):在/home/budweiser/public\u html/verify中出现意外字符”。php:13堆栈跟踪:#0/home/budweiser/public_html/verify。php(1
我正试图以小时为单位显示自这样一个日期以来的数字。。。 这是给我的错误信息。。。 有人知道我哪里出错了吗?
在文件错误消息的第26行中导致类型E_error的错误:未捕获异常:DateTime::_构造():未能分析位置0({:意外字符)处的时间字符串({field:launche_date_1623800874977}) 请帮帮我。