PHP计算日期范围,当一个是Y,另一个是Y-m-d

PHP to calculate date range, when one is Y and the other is Y-m-d

在PHP中,我想计算一个人的年龄。例如,A 生于“1790-06-09”,死于“1854”,但也有可能有 B 生于“1954”,死于“1990-02-05” .由于其中一个日期不完整,Y(即ISO8601中的yyyy)可视为Y-01-01。 Y 可作为字符串使用。

我尝试将日期字符串转换为 DateTime 并计算(见下文),但不确定如何创建 Y-01-01,以及如何在 A 的相同代码中处理 B 的情况。

$d1 = new DateTime($birthdate);
$d2 = new DateTime($deathdate);
$diff = $d2->diff($d1);

非常感谢聪明的解决方案。谢谢!

也许这可以帮到你:

<?php

function calculateAge($born, $death) {
    $born = strpos($born, '-') === false ? $born . '-01-01' : $born;
    $death = strpos($death, '-') === false ? $death . '-01-01' : $death;

    $d1 = new DateTime($born);
    $d2 = new DateTime($death);
    return $d2->diff($d1)->y;
}

您只需检查 - 字符是否存在即可假设日期为 "OK"。我还假设您将始终收到有效日期或仅收到一年。

使用DateTime::createFromFormat()

$birthdate = "1790-06-09";
$deathdate = "1854";

$d1 = new DateTime($birthdate);
$d2 = DateTime::createFromFormat('Y', $deathdate);

echo $d1->diff($d2)->y;

编辑: 您可以使用 preg_match 检查日期格式。这是验证 Y-m-d 格式的示例:

function dateYmdValid($date){
    return (preg_match("/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/", $date)) ? true : false;
}

$birthdate = "1790-06-09";
$deathdate = "1854";

$d1 = dateYmdValid($birthdate) ? new DateTime($birthdate)
                               : DateTime::createFromFormat('Y', $birthdate);
$d2 = dateYmdValid($deathdate) ? new DateTime($deathdate)
                               : DateTime::createFromFormat('Y', $deathdate);

echo $d1->diff($d2)->y;

输出:63