checkdate() 函数用于验证日期的有效性,检查指定的年、月、日是否构成一个有效的格里高利日期。
bool checkdate ( int $month , int $day , int $year )
| 参数 | 描述 | 必需 |
|---|---|---|
$month |
月份,范围 1-12 | 是 |
$day |
日期,范围取决于月份和闰年 | 是 |
$year |
年份,范围 1-32767 | 是 |
<?php
// 检查日期是否有效
if (checkdate(2, 29, 2024)) {
echo "2024年2月29日是有效日期(闰年)";
} else {
echo "日期无效";
}
// 输出:2024年2月29日是有效日期(闰年)
?>
<?php
// 模拟表单提交的日期数据
$year = 2023;
$month = 13; // 无效月份
$day = 32; // 无效日期
if (checkdate($month, $day, $year)) {
echo "日期有效";
} else {
echo "日期无效!请检查:月份{$month},日期{$day},年份{$year}";
}
// 输出:日期无效!请检查:月份13,日期32,年份2023
?>
<?php
// 验证日期并执行相关操作
$birthYear = 1990;
$birthMonth = 7;
$birthDay = 15;
if (checkdate($birthMonth, $birthDay, $birthYear)) {
echo "出生日期有效:{$birthYear}-{$birthMonth}-{$birthDay}";
// 计算年龄
$today = new DateTime();
$birthdate = new DateTime("{$birthYear}-{$birthMonth}-{$birthDay}");
$age = $today->diff($birthdate)->y;
echo ",年龄:{$age}岁";
} else {
echo "出生日期无效";
}
// 输出:出生日期有效:1990-7-15,年龄:34岁(假设当前是2024年)
?>
<?php
// 需要验证的日期数组
$datesToCheck = [
['year' => 2023, 'month' => 2, 'day' => 28],
['year' => 2023, 'month' => 2, 'day' => 29], // 无效
['year' => 2024, 'month' => 2, 'day' => 29], // 有效(闰年)
['year' => 2023, 'month' => 4, 'day' => 31], // 无效(4月只有30天)
['year' => 2023, 'month' => 12, 'day' => 31],
];
foreach ($datesToCheck as $date) {
$isValid = checkdate($date['month'], $date['day'], $date['year']);
$status = $isValid ? '✓ 有效' : '✗ 无效';
echo "{$date['year']}-{$date['month']}-{$date['day']}: {$status}<br>";
}
/*
输出:
2023-2-28: ✓ 有效
2023-2-29: ✗ 无效
2024-2-29: ✓ 有效
2023-4-31: ✗ 无效
2023-12-31: ✓ 有效
*/
?>
<?php
// 方法1:使用checkdate()
$valid1 = checkdate(2, 29, 2024);
// 方法2:使用DateTime类
try {
$date = new DateTime('2024-02-29');
$valid2 = true;
} catch (Exception $e) {
$valid2 = false;
}
// 方法3:使用strtotime()和date()
$timestamp = strtotime('2024-02-29');
$valid3 = ($timestamp !== false && date('Y-m-d', $timestamp) === '2024-02-29');
echo "checkdate: " . ($valid1 ? '有效' : '无效') . "<br>";
echo "DateTime: " . ($valid2 ? '有效' : '无效') . "<br>";
echo "strtotime: " . ($valid3 ? '有效' : '无效') . "<br>";
?>