int strtotime ( string time [, int now])
从用户输入转换为Unix时间戳格式可能相当棘手,因为有的人用DD/MM/YY格式,有的人用YY-MM-DD,有的人用DDDD-MM-YYYY格式,千奇百怪。
PHP提供了一个函数来帮你从字符串转换为时间戳,而且效果不错。strtotime()
就是这个函数,它有两个参数:第一个参数是要转换的时间字符串,第二个是可选参数,是一个相对时间戳。第一个参数很重要,第二个参数稍后再讲解。
来开一下这个代码:
<?php
print strtotime("22nd December 1979");
print strtotime("22 Dec. 1979 17:30");
print strtotime("1979/12/22");
?>
这里,我们用三种不同的方式来表示相同的日期,第二种方式还提供了一个具体时间。如果你运行代码的话,会看到PHP为每种方式都返回了一个整型的数字,其中第一种和第三种相同,第二种的数字稍微大一些。这些数字就是我们传递给strtotime()
后返回的Unix时间戳,能看到返回结果,说明函数成功转换。
注意strtotime()
使用的是美式日期表达方式,也就是说,如果输入10/11/2003
这样的日期,会被认为是10月11日而不是11月10日。
如果PHP不能将字符串转换为时间戳,将会返回-1。你可以巡行一下下面的代码,来看看日期是否被成功转换:
<?php
$mydate = strtotime("Christmas 1979");
if ($mydate == -1) {
print "Date conversion failed!";
} else {
print "Date conversion succeeded!";
}
?>
现在来看看strtotime()
的第二个可选参数,也就是相对日期时间戳。这个参数存在的原因是因为传递给strtotime()
的第一个参数可能是类似“下周六”、“两天”、“一年前”这种相对日期。在这种情况下,PHP需要知道这个相对日期的基准时间。你可以随便传入一个时间戳,PHP将会以此为基准输出“下周六”的时间戳。如果你没给出第二个参数,又使用了相对日期的话,PHP会假设你参考的是当前时间。
下面是使用方法示例:
<?php
print strtotime("Next Sunday");
print strtotime("2 days", time() - (86400 * 2));
print strtotime("1 year ago", 123456789);
?>
第一行将会输出下周六的时间戳,第二行用time()
减去两天作为第二个参数,用“两天”作为第一个参数,也就是返回当前的时间戳。最后一个例子返回从给定时间一年之前的时间戳。
从日期文本转换为可使用的日期格式实际并不容易,正是由于PHP的这个内建函数,才是个转换如此方便。你可以试试不同的字符串,看看哪些能转换成功,哪些转换失败。
作者说明:注意一下,像August 25, 2003, 10:26am.这种在我们看起来很明确的日期,因为其中含有逗号,
strtotime()
反而无法处理。所以,当你要处理日期的时候,需要先用str_replace()
将逗号去掉。