php中strtotime函数的功能:
获取某个日期的时间戳,或获取某个时间的时间戳。
strtotime 将任何英文文本的日期时间描述解析为Unix时间戳[将系统时间转化成unix时间戳]。
一,获取指定日期的unix时间戳
示例:
结果:1232553600
说明:返回2009年1月22日0点0分0秒时间戳
二,获取英文文本日期时间
使用date将当时间戳与指定时间戳转换成系统时间
(1)打印明天此时的时间戳strtotime("+1 day")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-23 09:40:25
(2)打印昨天此时的时间戳strtotime("-1 day")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-21 09:40:25
(3)打印下个星期此时的时间戳strtotime("+1 week")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-29 09:40:25
(4)打印上个星期此时的时间戳strtotime("-1 week")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-15 09:40:25
(5)打印指定下星期几的时间戳strtotime("next Thursday")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-29 00:00:00
(6)打印指定上星期几的时间戳strtotime("last Thursday")
当前时间:
结果:2009-01-22 09:40:25
指定时间:
结果:2009-01-15 00:00:00
由以上的示例,我们可以看到,strtotime()函数可以将任何英文文本的日期时间描述解析为Unix时间戳,如果再结合mktime()或date()格式化日期时间获取指定的时间戳,即可实现所需要
的日期时间。
建议大家亲自动手测试下上面的例子,多动手,多写代码,熟能生巧啊。
Y2K38 漏洞
Y2K38,又称 Unix Millennium Bug, 此漏洞将会影响到所有 32 位系统下用 UNIX 时间戳整数来记录时间的 PHP,及其它编程语言。一个整型的变量所能保存的最大时间为 2038 年 1 月
19 日 03:14:07。超过这个时间后,整型数值将会溢出。从 1970 年 01 月 01 日开始,到世界标准时 2038 年 01 月 19 日星期二凌晨 03:14:07 超过 2^31 – 1。2^31 – 1 就是
0x7FFFFFFF,相信很多编程员都看过,在 32 位系统里,这表示最大的有符号整数。如果用它来表示秒数,大概相当于 68.1 年,从 1970 年到 2038 年刚好是这个数。
64 位系统会受到影响吗?
理论上不会,强烈建议进行一下测试。64 位系统下可以保存的日期最远日期是现在宇宙年龄的 21 倍~ 292 亿年。
那么32位机器上,应该如何解决这个问题呢?
PHP 从 5.2 版本开始引入了一个 DateTime 的类(5.1 中开始实验加入,5.3 版本中扩展了一些方法)。
代码如下:
/**
* Datetime类应用举例
* www. at 2013/5/9 星期四
*/
$date = '2040-02-01';
$format = 'Y-m-d H:i';
$mydate2 = new DateTime($date);
echo '<p>正常时间:', $mydate2->format($format), '</p>';
echo '时间溢出:',date('Y-m-d H:i',strtotime($date));
exit;
?>
附,strtotime()函数用法小记
用strtotime比较时间大小,原来用strtotime(date("Y-m-d h:i:s"))进行比较,上周测试是正常的。
但是今天提交了个bug说日期范围不正确。后来改成strtotime("now");就可以了。
可能是存在时区的转换问题。
经过测试发现,strtotime(date("Y-m-d h:i:s")) 比如当前时间是下午5点21分。输入的是2013-01-21 5:30 35。而time()输出的是2013-01-21 17:30 35。
原来,h是区分大小写的,小写h输出的是时区的小时,17点就是5点。而大写H是输出17的。
而且年份y的大小写是有区别的,小写y输出的是13。大写Y输出的是2013。
后来,直接用time()代替strtotime("now"),效率更高。
希望以上介绍,有助于大家理解php中的时间函数strtotime()与mktime(),,祝大家学习进步。
很多朋友,一直以为PHP中单引号和双引号是互通的。
” ” 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。
‘ ‘ 单引号里面的不进行解释,直接输出。
从字面意思上就可以看出,单引号比双引号要快了。
例如:
echo $abc //结果是:my name is tom
echo ‘$abc’ //结果是:$abc
echo “$abc” //结果是:my name is tom
特别在使用MYSQL语句的时候,双引号和单引号的用法让新手不知所措。
假设查询条件中使用的是常量,例如:
SQL语句:
假设查询条件中使用的是变量,例如:
或
$user=array (”name”=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//数组变量
SQL语句:
SQLstr = “select * from abc_table where user_name = ‘ ” . $user["name"] . ” ‘ “;
对比一下:
SQLstr=”select * from abc_table where user_name =’ ” . $user _name . ” ‘ “;
SQLstr=”select * from abc_table where user_name =’ ” . $user["name"] . ” ‘ “;
SQLstr可以分解为如下的三个部分:
1、”select * from table where user_name = ‘ ” //固定SQL语句
2、$user //变量
3、” ‘ ”
1,2,3部分字符串之间用”.” 来连接。
大家测试下看看效率如何呢?!