php 常用方法

============ 获取文件名,文件扩展名以及所在目录的方法

<?php
$path_parts = pathinfo($_SERVER['PHP_SELF']);    //$_SERVER['PHP_SELF']是相对于根目录而言的路径。
echo $path_parts["dirname"] ;    //文件所在目录
echo $path_parts["basename"] ;    //文件名(全名,包括扩展名)
echo $path_parts["extension"] ;    //文件扩展名
?>

 

 

==============php时间

php5.*后的时区问题date_default_timezone_set ('Asia/Shanghai');

 

问题:

php函数date("Y-n-d   H-i-s");   输出的时间与当地时间相差8个小时.

解决思路

北京时间是东8区,可能是时区问题.但是此前都没问题啊,经过google发现原来从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和我们的时间(北京时间)差了正好8个小时。

1、可以date_default_timezone_set ('Etc/GMT-8');

红色标记部分可以改为"Etc/GMT-8","PRC"这两个在php帮助手册->附录 H. 所支持时区列表->其它时区列表里。

红色标记部分也可以改为"Asia/Shanghai","Asia/Chongqing","Asia/Urumqi"这三个在php帮助手册->附录 H. 所支持时区列表->亚洲时区列表里

测试

date_default_timezone_set ('Asia/Shanghai');
echo date_default_timezone_get ();
echo date("Y-n-d   H-i-s");  

输出结果:2007-4-21 10-28-25正确。
2、上面的修改是通过脚本修改,优点就是可移植性好,缺点就是每个脚本都要加。我们也可以通过修改php.ini的配置来达到目的。打开php.ini查找date.timezone 去掉前面的分号,等号后面填上上面红色标记的字段。修改结果是date.timezone ="Etc/GMT-8"

date_default_timezone_set ('Asia/Shanghai');
echo date_default_timezone_get ();
echo date("Y-n-d   H:i:s");  

输出结果:2007-10-21 10:30:35正确。

 

关于XXX
,大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi ,PRC(依次为重庆,上海,乌鲁木齐,中华人民共和国)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)
还有新加坡:Asia/Singapore
其它:Etc/GMT-8 ,Singapore ,Hongkong

 

========时间格式经

PHP获取当前时间格式化方法

使用函式 date() 实现
<?php echo $showtime=date("Y-m-d H:i:s");?>
显示的格式: 年-月-日 小时:分钟:妙
相关时间参数:
a - "am" 或是 "pm"
A - "AM" 或是 "PM"
d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"
D - 星期几,三个英文字母; 如: "Fri"
F - 月份,英文全名; 如: "January"
h - 12 小时制的小时; 如: "01" 至 "12"
H - 24 小时制的小时; 如: "00" 至 "23"
g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"
G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"
i - 分钟; 如: "00" 至 "59"
j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"
l - 星期几,英文全名; 如: "Friday"
m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"
n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"
M - 月份,三个英文字母; 如: "Jan"
s - 秒; 如: "00" 至 "59"
S - 字尾加英文序数,二个英文字母; 如: "th","nd"
t - 指定月份的天数; 如: "28" 至 "31"
U - 总秒数
w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六)
Y - 年,四位数字; 如: "1999"
y - 年,二位数字; 如: "99"
z - 一年中的第几天; 如: "0" 至 "365"

===================================

php实现escape和unescape
2008-03-08 00:06

 

    function
escape
(
$str

) {
        

preg_match_all
(
"/[\x80-\xff].|[\x01-\x7f]+/"
,
$str
,
$r

);
        

$ar
=
$r
[
0

];
         foreach(

$ar
as
$k
=>
$v

) {
             if(

ord
(
$v
[
0
]) <
128

) {
                

$ar
[
$k
] =
rawurlencode
(
$v

);
             } else {
                

$ar
[
$k
] =
"%u"
.
bin2hex
(
iconv
(
"GB2312"
,
"UCS-2"
,
$v

));
             }
         }
         return

join
(
""
,
$ar

);
     }

     function
unescape
(
$str

) {
        

$str
=
rawurldecode
(
$str

);
        

preg_match_all
(
"/(?:%u.{4})|.+/"
,
$str
,
$r

);
        

$ar
=
$r
[
0

];
         foreach(

$ar
as
$k
=>
$v

) {  
             if(

substr
(
$v
,
0
,
2
) ==
"%u"
&&
strlen
(
$v
) ==
6

) {
                

$ar
[
$k
] =
iconv
(
"UCS-2"
,
"GB2312"
,
pack
(
"H4"
,
substr
(
$v
,-
4

)));
             }
         }
         return

join
(
""
,
$ar

);
     }

 

 

========SQLite 时间差========================

WHERE julianday(date('now')) - julianday(date(arrival_date)) > 7

看来如果想得到一个符合本机区域设置的当前时间,必须用date函数来转换,
但date只函数只返回当前日期,而我需要的是返回当前日期及时间,所以这里把它换成datetime函数,即:
datetime(CURRENT_TIMESTAMP,'localtime')
 

 

==============================================
 

此条目发表在article分类目录,贴了标签。将固定链接加入收藏夹。