# mktime

(PHP 4, PHP 5, PHP 7)

mktime — 取得一个日期的 Unix 时间戳

### 说明

mktime ([ int `$hour` = date("H") [, int `$minute` = date("i") [, int `$second` = date("s") [, int `$month` = date("n") [, int `$day` = date("j") [, int `$year` = date("Y") [, int `$is_dst` = -1 ]]]]]]] ) : int

根据给出的参数返回 Unix 时间戳。时间戳是一个长整数，包含了从 Unix 纪元（January 1 1970 00:00:00 GMT）到给定时间的秒数。

参数可以从右向左省略，任何省略的参数会被设置成本地日期和时间的当前值。

### 注释

> Note:

> As of PHP 5.1, when called with no arguments, mktime() throws an `E_STRICT` notice: use the time() function instead.

### 参数

`hour`

  小时数。 The number of the hour relative to the start of the day determined by `month`, `day` and `year`. Negative values reference the hour before midnight of the day in question. Values greater than 23 reference the appropriate hour in the following day(s).

`minute`

  分钟数。 The number of the minute relative to the start of the `hour`. Negative values reference the minute in the previous hour. Values greater than 59 reference the appropriate minute in the following hour(s).

`second`

  秒数（一分钟之内）。 The number of seconds relative to the start of the `minute`. Negative values reference the second in the previous minute. Values greater than 59 reference the appropriate second in the following minute(s).

`month`

  月份数。 The number of the month relative to the end of the previous year. Values 1 to 12 reference the normal calendar months of the year in question. Values less than 1 (including negative values) reference the months in the previous year in reverse order, so 0 is December, -1 is November, etc. Values greater than 12 reference the appropriate month in the following year(s).

`day`

  天数。 The number of the day relative to the end of the previous month. Values 1 to 28, 29, 30 or 31 (depending upon the month) reference the normal days in the relevant month. Values less than 1 (including negative values) reference the days in the previous month, so 0 is the last day of the previous month, -1 is the day before that, etc. Values greater than the number of days in the relevant month reference the appropriate day in the following month(s).

`year`

  年份数，可以是两位或四位数字，0-69 对应于 2000-2069，70-100 对应于 1970-2000。在如今系统中普遍把 time_t 作为一个 32 位有符号整数的情况下，`year` 的合法范围是 1901 到 2038 之间，不过此限制自 PHP 5.1.0 起已被克服了。

`is_dst`

  本参数可以设为 1，表示正处于夏时制时间（DST），0 表示不是夏时制，或者 -1（默认值）表示不知道是否是夏时制。如果未知，PHP 会尝试自己搞明白。这可能产生不可预知（但并非不正确）的结果。如果 PHP 运行的系统中启用了 DST 或者 `is_dst` 设为 1，某些时间是无效的。例如 DST 自 2:00 生效，则所有处于 2:00 到 3:00 之间的时间都无效，mktime() 会返回一个未定义（通常为负）的值。某些系统（例如 Solaris 8）的 DST 在午夜生效，则 DST 生效当天的 0:30 会被计算为前一天的 23:30。

  > Note:

  > 自 PHP 5.1.0 起，本参数已被废弃。应该使用新的时区处理特性来替代。

  > Note:

  > PHP 7.0.0 起，此参数已经被移除。

### 返回值

mktime() 根据给出的参数返回 Unix 时间戳。如果参数非法，本函数返回 `FALSE`（在 PHP 5.1 之前返回 -1）。

### 错误／异常

在每 次调用日期/时间函数时，如果时区无效则会引发 `E_NOTICE` 错误，如果使用系统设定值或 TZ 环境变量，则会引发 `E_STRICT` 或 `E_WARNING` 消息。参见 date_default_timezone_set()。

### 更新日志

版本 | 说明
--- | ---
7.0.0 | `is_dst`参数已经被移除。
5.3.0 | mktime() now throws `E_DEPRECATED` notice if the `is_dst` parameter is used.
5.1.0 | `is_dst` 参数被废弃。出错时函数返回 `FALSE` 而不再是 -1。修正了本函数可以接受年月日参数全为零。
5.1.0 | When called with no arguments, mktime() throws `E_STRICT` notice. Use the time() function instead.
5.1.0 | 现在发布 `E_STRICT` 和 `E_NOTICE` 时区错误。

### 范例

Example #1 基本例子

    <?php
    // Set the default timezone to use. Available as of PHP 5.1
    date_default_timezone_set('UTC');

    // Prints: July 1, 2000 is on a Saturday
    echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));

    // Prints something like: 2006-04-05T01:02:03+00:00
    echo date('c', mktime(1, 2, 3, 4, 5, 2006));
    ?>

Example #2 mktime() 例子

mktime() 在做日期计算和验证方面很有用，它会自动计算超出范围的输入的正确值。例如下面例子中每一行都会产生字符串 "Jan-01-1998"。

    <?php
    echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
    echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
    echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
    echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
    ?>

Example #3 下个月的最后一天

任何给定月份的最后一天都可以被表示为下个月的第 "0" 天，而不是 -1 天。下面两个例子都会产生字符串 "The last day in Feb 2000 is: 29"。

    <?php
    $lastday = mktime(0, 0, 0, 3, 0, 2000);
    echo strftime("Last day in Feb 2000 is: %d", $lastday);
    $lastday = mktime(0, 0, 0, 4, -31, 2000);
    echo strftime("Last day in Feb 2000 is: %d", $lastday);
    ?>

### 注释

Caution

在 PHP 5.1.0 之前，在任何已知 Windows 版本以及一些其它系统下不支持负的时间戳。因此年份的有效范围限制为 1970 到 2038。

### 参见

- checkdate() - 验证一个格里高里日期
- gmmktime() - 取得 GMT 日期的 UNIX 时间戳
- date() - 格式化一个本地时间／日期
- time() - 返回当前的 Unix 时间戳