mktime() 函数返回一个日期的Unix时间戳。Unix时间戳表示从Unix纪元(1970年1月1日 00:00:00 GMT)到指定时间的秒数。
这个函数对于创建自定义日期、验证日期、计算日期差等操作非常有用。
mktime(
int $hour = date("H"),
int $minute = date("i"),
int $second = date("s"),
int $month = date("m"),
int $day = date("d"),
int $year = date("Y")
) : int|false
| 参数 | 默认值 | 描述 |
|---|---|---|
| hour | 当前小时 | 小时数,0 到 23。超过23的值会进位到天 |
| minute | 当前分钟 | 分钟数,0 到 59。超过59的值会进位到小时 |
| second | 当前秒数 | 秒数,0 到 59。超过59的值会进位到分钟 |
| month | 当前月份 | 月份,1 到 12。超过12的值会进位到年 |
| day | 当前日 | 日,1 到 31。超过当月天数的值会进位到月 |
| year | 当前年份 | 年份,1 到 32767。如果只有两位数,则会自动转换为4位数(0-69转换为2000-2069,70-99转换为1970-1999) |
返回指定日期时间的Unix时间戳(整数)。如果日期非法,返回 false。
<?php
// 获取当前时间的时间戳
$timestamp = mktime();
echo "当前时间的时间戳:" . $timestamp;
echo "<br>";
echo "格式化时间:" . date("Y-m-d H:i:s", $timestamp);
// 输出类似:
// 当前时间的时间戳:1679876543
// 格式化时间:2023-03-26 14:15:43
?>
<?php
// 创建2023年8月15日 10:30:45的时间戳
$timestamp = mktime(10, 30, 45, 8, 15, 2023);
echo "时间戳:" . $timestamp;
echo "<br>";
echo "格式化时间:" . date("Y-m-d H:i:s", $timestamp);
// 输出:
// 时间戳:1692077445
// 格式化时间:2023-08-15 10:30:45
?>
<?php
// 使用两位数年份
$timestamp1 = mktime(0, 0, 0, 1, 1, 70); // 1970年
echo "1970-01-01: " . date("Y-m-d", $timestamp1);
echo "<br>";
$timestamp2 = mktime(0, 0, 0, 1, 1, 69); // 2069年
echo "2069-01-01: " . date("Y-m-d", $timestamp2);
echo "<br>";
$timestamp3 = mktime(0, 0, 0, 1, 1, 99); // 1999年
echo "1999-01-01: " . date("Y-m-d", $timestamp3);
// 输出:
// 1970-01-01: 1970-01-01
// 2069-01-01: 2069-01-01
// 1999-01-01: 1999-01-01
?>
<?php
// 计算两个日期的天数差
function getDaysBetweenDates($date1, $date2) {
$timestamp1 = mktime(0, 0, 0,
substr($date1, 5, 2), // 月
substr($date1, 8, 2), // 日
substr($date1, 0, 4) // 年
);
$timestamp2 = mktime(0, 0, 0,
substr($date2, 5, 2),
substr($date2, 8, 2),
substr($date2, 0, 4)
);
$diff = abs($timestamp2 - $timestamp1);
$days = floor($diff / (60 * 60 * 24));
return $days;
}
$start_date = "2023-01-01";
$end_date = "2023-12-31";
$days = getDaysBetweenDates($start_date, $end_date);
echo "从{$start_date}到{$end_date}共有{$days}天";
// 输出:
// 从2023-01-01到2023-12-31共有364天
?>
<?php
function isValidDate($year, $month, $day) {
$timestamp = mktime(0, 0, 0, $month, $day, $year);
return $timestamp !== false;
}
// 测试合法日期
$date1 = isValidDate(2023, 2, 28); // 合法
$date2 = isValidDate(2023, 2, 29); // 不合法(2023年不是闰年)
$date3 = isValidDate(2024, 2, 29); // 合法(2024年是闰年)
$date4 = isValidDate(2023, 13, 1); // 不合法
echo "2023-02-28: " . ($date1 ? "合法" : "不合法") . "<br>";
echo "2023-02-29: " . ($date2 ? "合法" : "不合法") . "<br>";
echo "2024-02-29: " . ($date3 ? "合法" : "不合法") . "<br>";
echo "2023-13-01: " . ($date4 ? "合法" : "不合法") . "<br>";
// 输出:
// 2023-02-28: 合法
// 2023-02-29: 不合法
// 2024-02-29: 合法
// 2023-13-01: 不合法
?>
<?php
// 计算30天后的日期
$now = time();
$future = mktime(
date("H", $now),
date("i", $now),
date("s", $now),
date("m", $now),
date("d", $now) + 30, // 加30天
date("Y", $now)
);
echo "当前时间:" . date("Y-m-d H:i:s", $now) . "<br>";
echo "30天后:" . date("Y-m-d H:i:s", $future);
// 输出类似:
// 当前时间:2023-08-15 10:30:45
// 30天后:2023-09-14 10:30:45
?>
<?php
// 分钟溢出
$timestamp1 = mktime(10, 90, 0, 1, 1, 2023); // 90分钟 = 1小时30分钟
echo "10:90:00 2023-01-01 = " . date("Y-m-d H:i:s", $timestamp1);
echo "<br>";
// 小时溢出
$timestamp2 = mktime(25, 0, 0, 1, 1, 2023); // 25小时 = 第二天1点
echo "25:00:00 2023-01-01 = " . date("Y-m-d H:i:s", $timestamp2);
echo "<br>";
// 日期溢出
$timestamp3 = mktime(0, 0, 0, 1, 32, 2023); // 1月32日 = 2月1日
echo "2023-01-32 = " . date("Y-m-d", $timestamp3);
echo "<br>";
// 月份溢出
$timestamp4 = mktime(0, 0, 0, 13, 1, 2023); // 13月 = 下一年1月
echo "2023-13-01 = " . date("Y-m-d", $timestamp4);
// 输出:
// 10:90:00 2023-01-01 = 2023-01-01 11:30:00
// 25:00:00 2023-01-01 = 2023-01-02 01:00:00
// 2023-01-32 = 2023-02-01
// 2023-13-01 = 2024-01-01
?>
<?php
function calculateAge($birth_year, $birth_month, $birth_day) {
$now = time();
$birth = mktime(0, 0, 0, $birth_month, $birth_day, $birth_year);
$age = date("Y", $now) - date("Y", $birth);
// 如果生日还没到,减1岁
if (mktime(0, 0, 0, date("m", $now), date("d", $now), date("Y", $now))
< mktime(0, 0, 0, $birth_month, $birth_day, date("Y", $now))) {
$age--;
}
return $age;
}
$age = calculateAge(1990, 8, 15);
echo "年龄:" . $age . "岁";
// 如果今天是2023-08-15,输出:年龄:33岁
// 如果今天是2023-08-14,输出:年龄:32岁
?>
false-1strtotime() 或 DateTime 类处理复杂日期计算