3 回答

TA貢獻1842條經驗 獲得超13個贊
我像這樣修復你的函數:
function get_age($birthDate_old) {
return date_diff(
DateTime::createFromFormat('d/m/Y', $birthDate_old),
new DateTime('today')
)->y;
}
在你的情況下,你的日期格式不正確,因為 DateTime 構造函數不知道你是經過一個月還是一天。
05/04/1946 還可以。
26/01/1958 是不行的,因為 26 默認表示月份。

TA貢獻1821條經驗 獲得超6個贊
據此:
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";

TA貢獻1821條經驗 獲得超5個贊
問題是日期格式。我相信你正在“/”和“-”之間切換。如果您正在處理大數據,則很難修復整個數據庫,因此我最好的建議是進行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);
我希望它有幫助!讓我知道
- 3 回答
- 0 關注
- 140 瀏覽
添加回答
舉報