PHP mktime()、getdate() 、checkdate()、strftime()函数
mktime()函数
如果要将一个日期和时间转变成UNIX时间戳,可以使用mktime()函数。该函数原型如下所示:
int mktime([int hour[,int minute[,int second[,int month[,int day[,int year[,int is_dst]]]]]]])
除了最后一个参数is_dst外,其他参数的含义都很容易理解。参数is_dst表示该日期所示的时间是否是夏令时。如果是,可以将其设置为1,如果不是,设置为0(默认值),如果不知道,则设置为-1(默认值)。在使用-1的情况下,PHP将根据所运行的系统来确定它。该参数是可选的,很少用到。
使用该函数需要避免的一个主要陷阱是其参数顺序非常不直观。参数的顺序不允许漏掉一个时间参数。如果对具体时刻不在乎,可以将0传给hour、minute和second参数。
可以从参数列的右边开始遗漏参数的值。如果参数为空,将默认为当前时间。因此,如下所示的调用:
$timestamp=mktime();
将返回当前日期和时间的UNIX时间戳。当然,也可以通过如下所示的调用获取当前的UNIX时间戳:
$timestamp=time();
time()函数不需要任何参数,而且通常返回当前日期和时间的UNIX时间戳。
如下语句等价于上两个语句:
$timestamp=date("U");
可以将用2位或4位数字表示的年份数传递给mktime()函数。从0~69的2位数字表示的年份可以解释成2000年到2069年,而从70~99的年份解释成1970年到1999年。
如下所示的代码是说明mktime()函数使用的其他例子:
$time=mktime(12,0,0);
该语句将给出今天日期的中午时间。
$time=mktime(0,0,0,1,1);
该语句将给出当前年的1月1日。请注意,在小时参数中,我们使用了0(而不是24)来表示午夜。
也可以在简单日期算法中使用mktime()函数。如下所示:
$time=mktime(12,0,0,$mon,$day+30,$year);
虽然($day+30)通常都会大于一个月的日期,该语句将在指定的日期基础上增加30天。
要消除冬令时和夏令时之间的问题,可以使用12点来代替0点。如果在25小时日中增加(24*60*60)s,将停留在同一天。在中午时间增加相同的秒数,将给出11am时间,但是至少是在正确的一天。
getdate()函数
能够确定当前时间的另一个很实用的函数是getdate()函数。该函数原型如下所示:
array getdate([int timestamp])
它以时间戳作为可选参数,返回一个相关数组,表示日期和时间的各个部分。
在数组中定义了以上数据后,可以很方便地将它们转换成任何所需
的格式。如果调用没有参数的getdate()函数,它将返回当前的时间戳。
<?php
$today=getdate();
var_dump($today);
输出:
array
'seconds' => int 11
'minutes' => int 33
'hours' => int 23
'mday' => int 14
'wday' => int 4
'mon' => int 12
'year' => int 2017
'yday' => int 347
'weekday' => string 'Thursday' (length=8)
'month' => string 'December' (length=8)
0 => int 1513265591
使用checkdate()函数检验日期有效性
可以调用checkdate()函数来检验日期是否有效。这对检查用户输入的日期来说是非常有用的。checkdate()函数的原型如下所示:
int checkdate(int month,int day,int year)
它将检查年份数是否为介于0~32 767的一个整数,月份是否介于1~12,以及日期是否存在于特定的月份。当判断一个日期是否有效时,该函数同样会考虑闰年。
例如:
checkdate(2,29,2008)
将返回true,而:
checkdate(2,29,2007)
则返回false。
格式化时间戳 strftime()函数
使用strftime()函数,你可以根据系统的locale(地域,Web服务器的本地设置)来格式化一个时间戳。这个函数具有如下所示的原型:
string strftime(string$format[,int$timestamp])
format参数是定义了如何显示时间戳的格式化代码。
timestamp参数是传递给该函数的时间戳。这个参数是可选的。如果没有传递时间戳参数,本地系统的时间戳(脚本运行时的时间戳)将被返回。如下代码
所示:
<?php
echo strftime('%A<br/>');
echo strftime('%x<br/>');
echo strftime('%c<br/>');
echo strftime('%Y<br/>');
?>
以上代码用四种不同格式显示了系统的当前时间戳。这段代码将产
生类似于如下的输出:
Friday
03/16/07
03/16/07 21:17:24
2007