亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未捕獲的異常: 日期時間::__construct(): 無法解析時間字符串

未捕獲的異常: 日期時間::__construct(): 無法解析時間字符串

PHP
楊__羊羊 2022-09-25 20:48:15
我正在使用以下函數來計算人們的年齡(以年為單位),從生日日期(歐洲格式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);對于$birthday值 = 05/04/1946,它工作正常,但對于$birthday值 = 26/01/1958,我得到上面的錯誤。我不明白為什么數據在我看來在2種情況下的格式相同。你有什么線索嗎?謝謝。問候。
查看完整描述

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 默認表示月份。


查看完整回答
反對 回復 2022-09-25
?
達令說

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";


查看完整回答
反對 回復 2022-09-25
?
收到一只叮咚

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);

我希望它有幫助!讓我知道


查看完整回答
反對 回復 2022-09-25
  • 3 回答
  • 0 關注
  • 140 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號