日期转换为时间戳
PHP 提供了函数可以方便的将各种形式的日期转换为时间戳,该类函数主要是:
- strtotime():将任何英文文本的日期时间描述解析为时间戳。
- mktime():从日期取得时间戳。
strtotime()
strtotime() 函数用于将英文文本字符串表示的日期转换为时间戳,为 date() 的反函数,成功返回时间戳,否则返回 FALSE 。
语法:
int strtotime ( string time [, int now] )
参数 time 为被解析的字符串,是根据 GNU 日期输入格式表示的日期。
例子:
<?php echo strtotime("2009-10-21 16:00:10"); //输出 1256112010 echo strtotime("10 September 2008"); //输出 1220976000 echo strtotime("+1 day"), "<br />"; //输出明天此时的时间戳 ?>
mktime()
mktime() 函数用于从日期取得时间戳,成功返回时间戳,否则返回 FALSE 。
语法:
int mktime(时, 分, 秒, 月, 日, 年)
例子:
<?php echo mktime(21, 50, 55, 07, 14, 2010); //输出“1279115455” ?>
参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。
mktime() 在做日期计算和验证方面很有用,它会自动计算超出范围的输入的正确值。例如下面例子输出的都是 2008-01-01:
<?php echo date("Y-m-d", mktime(0, 0, 0, 12, 32, 2007)); echo date("Y-m-d", mktime(0, 0, 0, 13, 1, 2007)); ?>
下个月的最后一天:
任何给定月份的最后一天都可以被表示为下个月的第 "0" 天,而不是 -1 天,如下面的例子:
<?php $lastday = mktime(0, 0, 0, 3, 0, 2008); echo strftime("2008年最后一天是:%d", $lastday); ?>
浏览器输出:
2008年最后一天是:29
便于比较,使用date将当时间戳与指定时间戳转换成系统时间
(1)打印明天此时的时间戳strtotime(”+1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 day”)) 结果:2009-01-2309:40:25
(2)打印昨天此时的时间戳strtotime(”-1 day”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 day”)) 结果:2009-01-2109:40:25
(3)打印下个星期此时的时间戳strtotime(”+1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”+1 week”)) 结果:2009-01-2909:40:25
(4)打印上个星期此时的时间戳strtotime(”-1 week”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”-1 week”)) 结果:2009-01-1509:40:25
(5)打印指定下星期几的时间戳strtotime(”next Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”next Thursday”))结果:2009-01-29 00:00:00
(6)打印指定上星期几的时间戳strtotime(”last Thursday”)
当前时间:echo date(”Y-m-d H:i:s”,time()) 结果:2009-01-22 09:40:25
指定时间:echo date(”Y-m-d H:i:s”,strtotime(”last Thursday”))结果:2009-01-15 00:00:00
以上PHP时间戳函数示例可知,strtotime能将任何英文文本的日期时间描述解析为Unix时间戳,我们结合mktime()或date()格式化日期时间获取指定的时间戳,实现所需要的日期时间。
示例:
<?php
//时间戳转日期
$date_time_array = getdate(1297845628);//1311177600 1316865566
$hours = $date_time_array["hours"];
$minutes = $date_time_array["minutes"];
$seconds = $date_time_array["seconds"];
$month = $date_time_array["mon"];
$day = $date_time_array["mday"];
$year = $date_time_array["year"];
echo"year:$year
month:$month
day:$day
hour:$hours
minutes:$minutes
seconds:$seconds
";
//正常日期转时间戳
echo mktime(0, 0, 0, 9, 18, 2011) . "
";
echo mktime(0, 0, 0, 9, 25, 2011) . "
";
//把正常日期转成时间戳了,这里如果有时分秒也是同理,
$year=((int)substr("2008-12-04",0,4));//取得年份
$month=((int)substr("2008-12-04",5,2));//取得月份
$day=((int)substr("2008-12-04",8,2));//取得几号
echo mktime(0,0,0,$month,$day,$year);
?>
时间戳转换为日期
echo "time()显示年月日时分秒:" . date("Y-m-d H:i:s", time()) . "
";
//这样连时,分秒一起显示
echo "time()只显示年月日:" . date("Y-m-d ", time()) . "
";//只年示年月日
echo "时间戳格式化:" . date("Y-m-d H:i:s", 1297845628) . "
";//直接使用时间戳
Y :年(四位数)大写
m : 月(两位数,首位不足补0) 小写
d :日(两位数,首位不足补0) 小写
H:小时 带有首位零的 24 小时小时格式
h :小时 带有首位零的 12 小时小时格式
i :带有首位零的分钟
s :带有首位零的秒(00 -59)
a:小写的午前和午后(am 或 pm)