PHP
日期和时间 | Date and Time

mktime

mktime

(PHP 4, PHP 5, PHP 7)

mktime - 为日期获取Unix时间戳

描述

int 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 ]]]]]]] )

返回与给定参数对应的Unix时间戳。此时间戳是一个长整型,包含Unix Epoch(1970年1月1日00:00:00 GMT)与指定时间之间的秒数。

参数可能从右到左依次排列;根据当地的日期和时间,这样省略的任何参数将被设置为当前值。

笔记

注意:从PHP 5.1开始,当调用不带参数时,mktime()会引发E_STRICT通知:使用time()函数。

参数

hour

相对于一天开始的小时数monthday以及year。负值指的是当天午夜前的小时。大于23的值引用次日的适当小时。

minute

分钟数相对于开始的分钟数hour。负值参考前一小时的分钟。大于59的值在下一小时中引用适当的分钟。

second

相对于开始的秒数minute。负值参考前一分钟中的第二个值。大于59的值在下面的分钟中引用适当的秒。

month

相对于上一年结束的月份数。值1至12引用有关年份的正常日历月份。小于1的值(包括负值)以相反顺序引用前一年的月份,因此0表示12月,-1表示11月份等。大于12的值将引用下一年的相应月份。

day

相对于上个月的结束日期的数量。值1到28,29,30或31(取决于月份)引用相关月份中的正常日期。小于1的值(包括负值)引用上个月的日期,因此0是上个月的最后一天,-1是前一天的日期等。值大于相关月份参考中的天数在下个月的适当日期。

year

一年中的数字可以是两位或四位数值,其值在0-69到2000-2069之间,70-100到1970-2000之间。在time_t是一个32位有符号整数的系统上,这是目前最常见的系统,其有效范围year介于1901和2038之间。但是,在PHP 5.1.0之前,在某些系统(例如Windows)上,这个范围从1970年到2038年是有限的。

is_dst

如果时间在夏时制时间(DST),则此参数可以设置为1;如果不是,则可以将此参数设置为1;如果不知道时间是否在夏时制时间内,则可以将此参数设置为-1(默认设置)。如果它是未知的,PHP试图找出它自己。这可能会导致意外(但不正确)的结果。如果在PHP运行的系统上启用了DST,或者is_dst设置为1,则某些时间无效。如果在例如2:00启用了DST,则在2:00和3:00之间的所有时间都是无效的,并且mktime()返回未定义(通常为负值)。有些系统(例如Solaris 8)在午夜启用DST,因此在启用DST的那一天的0:30时间评估为前一天的23:30。

注意:从PHP 5.1.0开始,此参数已被弃用。因此,应该使用新的时区处理功能。

注意:该参数已在PHP 7.0.0中删除。

返回值

mktime()返回给定参数的Unix时间戳。如果参数无效,函数返回FALSE(在PHP 5.1之前它返回-1)。

错误/异常

如果使用系统设置或TZ环境变量E_NOTICE,则每次调用日期/时间函数都会生成一个如果时区无效的信息and/orE_STRICTE_WARNINGmessage。另请参阅date_default_timezone_set()

Changelog

描述
7.0.0is_dst参数已被删除。
5.3.0如果使用is_dst参数,则mktime()现在会引发E_DEPRECATED通知。
5.1.0is_dst参数已被弃用。使该函数在错误时返回FALSE,而不是-1。修正了接受年,月和日全部为零的功能。
5.1.0当没有参数调用时,mktime()会引发E_STRICT通知。改用time()函数。
5.1.0现在发出E_STRICT和E_NOTICE时区错误。

示例

Example #1 mktime() basic example

<?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() example

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 Last day of a month

任何给定月份的最后一天可以表示为下个月的“0”日,而不是-1天。以下两个示例都会生成字符串“2000年2月的最后一天是: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 ?>

笔记

警告

在PHP 5.1.0之前,负面时间戳在任何已知版本的Windows和其他一些系统下都不受支持。因此,有效年限范围限于1970年至2038年。

另请参阅

  • checkdate() - 验证公历日期

  • gmmktime() - 获取GMT日期的Unix时间戳

  • date() - 格式化本地时间/日期

  • time() - 返回当前的Unix时间戳

← microtime

strftime →