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
在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