PHP中常见的格式化显示时间日期函数
time()函数
time() 函数返回当前时间的 Unix 时间戳。返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。
自 PHP 5.1 起在 $_SERVER['REQUEST_TIME'] 中保存了发起该请求时刻的时间戳。
代码如下 | 复制代码 |
<?php 程序运行结果: 1292984702 Wed December 22 2010 |
1292984702单位是秒,从1970 年 1 月 1 日 00:00:00到现在的秒数。
有时候我们想知道下一周的今天的一些情况,比如是几号,星期几等等,我们可以这么写:
代码如下 | 复制代码 |
<?php 程序运行结果: Now: 2010-12-22 Next Week: 2010-12-29 Wed |
date()函数
这个函数就比较熟悉了。
代码如下 | 复制代码 |
<?php echo("Result with gmdate():<br />"); 程序运行结果:
Result with gmdate(): |
所以,我们应该给一个兼容性的写法,统一使用gmdate,并手工设置当前时区,写法改进如下:
代码如下 | 复制代码 |
echo gmdate('Y-m-d H:i:s', time() + 3600 * 8); |
这样不管在Linux+Apache下还是Windows下都得到了正确的结果,当然这样写还有一个好处,当网站是面向全世界的时候,那么网站用户只要设置所在的时区,程序自动根据用户设置的时区进行时间计算,数据库中信息发布时间只存当前的time()所生成的时间,那么在中国+8时区看到的发布时间是:2007-03-14 12:15:27,那么在欧洲+2时区用户看到这个信息的发布时间是:2007-03-14 06:15:27,这样信息的时间就全部对应正确了。
一个用于社区的自定格式显示日期
代码如下 | 复制代码 |
/** * 格式化显示时间函数 * * 类似豆瓣(几秒前/几分前/今天3:50/昨天3:50/3-6) * * @param $timestamp 时间戳 必选参数,后面三个参数可选,为提高计算速度,建议直接赋值 * @param $now 当前时间戳 * @param $today 今天00:00时间戳 * @param $yesterday 昨天00:00时间戳 * @return string */ function timeshow($timestamp,$now=0,$today=0,$yesterday = 0){ if(! $timestamp){return '';} if(! $now){$now = time();} if(! $today){$today = strtotime("today");} if(! $yesterday){$yesterday = $today-86400;} $cha = $now-$timestamp; if($cha<60){ return $cha."秒前"; }elseif($cha<60*60){ $min = floor($cha/60); return $min."分钟前"; }elseif($timestamp>=$today){ return date("今天H:i",$timestamp); }elseif($timestamp>=$yesterday){ return date("昨天H:i",$timestamp); }else{ return date("m-d",$timestamp); } } |
文章最后给大家介绍一些参数
格式化方式 | 说明 |
---|---|
Y | 4位数字年,y为2位数字,如99即1999年 |
m | 数字月份,前面有前导0,如01。n 为无前导0数字月份 |
F | 月份,完整的文本格式,例如 January 或者 March |
M | 三个字母缩写表示的月份,例如 Jan 或者 Mar |
d | 月份中的第几天,前面有前导0,如03。j 为无前导0的天数 |
w | 星期中的第几天,以数字表示,0表示星期天 |
z | 年份中的第几天,范围0-366 |
W | 年份中的第几周,如第32周 |
H | 24小时格式,有前导0,h为12小时格式 |
G | 24小时格式,无前导0,g为对应12小时格式 |
i | 分钟格式,有前导0 |
s | 秒格式,有前导0 |
A | 大写上下午,如AM,a为小写 |
可选参数 timestamp 表示时间戳,默认为 time() ,即当前时间戳。
在php中cookie与session通常用于注册登录与记录用户信息了,但是cookie与Session两个有很大的区别,下面我们一起来看看。会话简介:HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本、图形、视频和所有
其他数据所有的规则。HTTP 是一种无状态的协议,说明每次请求的处理都与之前或之后的
请求无关。虽然这种简化实现对于HTTP 的普及做出了卓越的贡献,但对于希望创建复杂的
Web 应用程序的开发人员来说,这点有点困扰。为了解决这个问题,出现了一种在客户端
机器上存储少量信息(cookie)。
由于cookie 大小限制、数量及其他原因,开发人员又提出了一种解决方案:session 会
话处理。
一.Cookie
的应用
设置cookie:setcookie()函数可以在客户端生成一个cookie 文件,这个文件可以保存到
期时间、名称、值等。
创建cookie
代码如下 | 复制代码 |
<?php setcookie(‘name’,'Lee’,time()+(7*24*60*60));//设置一个过期时间为7天的cookie ?> |
参数1:cookie 名称
参数2:cookie 值
参数3:cookie 过期时间
查看cookie
打开火狐浏览器:工具–页面信息-安全-查看cookie,可以查看到当前的cookie信息
读取cookie
代码如下 | 复制代码 |
<?php echo $_COOKIE['name']; ?> |
删除cookie
代码如下 | 复制代码 |
<?php setcookie(‘name’,”); setcookie(‘name’,'Lee’,time()-1); ?> |
使用Cookie 的限制
1、必须在HTML 文件的内容输出之前设置;
2、不同的浏览器对Cookie 的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的Cookie 数量最多为30 个,并且每个不能
超过4KB,每个WEB 站点能设置的Cookie 总数不能超过20 个。
二.Session
会话处理
在使用session 会话处理,必须开始session,使用session_start()开始会话。
创建session 并读取session
代码如下 | 复制代码 |
<?php session_start(); $_SESSION['name'] = ‘Lee’; echo $_SESSION['name']; ?> |
判断session 是否存在
代码如下 | 复制代码 |
<?php session_start(); $_SESSION['name'] = ‘Lee’; if (isset($_SESSION['name'])) { echo $_SESSION['name']; } ?> |
删除session
代码如下 | 复制代码 |
<?php session_start(); $_SESSION['name'] = ‘Lee’; unset($_SESSION['name']); echo $_SESSION['name']; ?> |
销毁所有session
代码如下 | 复制代码 |
<?php session_start(); $_SESSION['name'] = ‘Lee’; $_SESSION['name2'] = ‘Lee’; session_destroy(); echo $_SESSION['name']; echo $_SESSION['name2']; ?> |
cookie与session的区别和关系
•存储位置:
1.session存储在服务器位置上,可以通过php.ini里面配置session相关配置
2.cookie存储在客户端上的上(其实可以分两种:
1,持久性cookie,设置了cookie的时间,以文件方式存在硬盘上,
2,会话cookie,没有设置cookie时间,cookie的生命周期也就是关闭浏览器前就消失,一般不会保存在硬盘,而是保存在内存上)
cookie和session的关系
cookie通过http报头发送:
Cookie name=PHP%BB%B4%B1%B1; PHPSESSID=cpt2ah3pi4cu7lo69nfbfllbo7
其中PHPSESSID就是关联服务器session的重要参数
再看session文件:sess_cpt2ah3pi4cu7lo69nfbfllbo7
session_id的生成格式就是:sess_加上一串PHPSESSID的值
我们可以这样理解:
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识 (称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来 使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相 关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应 中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给 服务器。一般这个cookie的名字都是类似于SEEESIONID
php.ini里面关于session和cookie有关的配置
1,session.use_cookie = 1
是否采用Cookie方法传递session id值。默认是1,表示启用。
2,session.name = PHPSESSID
不管是Cookie传递sessioin_id,还是GET方法传递session_id,都需要使用键值。他们的格式分别是Cookie: sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定的。
3,session.use_only_cookies = 0
表示只使用Cookie 的方法传递session id。我们说过,传递cookie的方法,除了cookie,还有GET方法,GET方法是不安全的方法。在用户端禁用了cookie的时候,会采用GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。
4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =
如果使用Cookie方法传递session_id的话,这里分别指定了cookie有效域、目录和时间。分别对应setcookie()函数的形参$expire、$path和$domain。其中cookie_lifetime=0表示直到关闭浏览器才删除Cookie。还可以使用session_set_cookie_params()函数修改这些值。
5,session_name([string $name])
获取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。
6,session_id([string $id])
与session_name()类似,但它是读取或者设置session_id的方法。同样,设置session_id的话,必须在session_start()之前调用才有效。
7,session_set_cookie_params()和session_get_cookie_params()
通过session_set_cookie_params()可以重新设定session.cookie_lifetime, session.cookie_path以及session.cookie_domain这三个php.ini设置。而session_get_cookie_params()则是获取这些设定的值。
这里我自己特别去做了一张表,把他们的不同点和相同点总结了一下:
我们经常会在发现页面中无故多了一些空白行了,但在编辑器中又看到到,这个我们知道是由BOM(UTF-8)导致的,下面小编来给大家分享几种关于BOM(UTF-8)检测与删除方法。下图是出现前面说的情况后用firebug看到的HTML代码。
图1
里面莫名其妙多出了一个空白行,而我们看源代码里面却没有。
我最常用的办法,利用php替换
BOM: 万国码档案签名 BOM (Byte Order Mark, U+FEFF)
BOM 的内容可以表示 UNICODE 是哪种编码, 但是在接收到的档案, 要拆解后写入 DB, 看到 BOM 就觉得有点 ooxx.
在 utf8_encode 看到两段程式可以来测试 写入/移除 BOM.
将写入的档案内容前加 BOM
代码如下 | 复制代码 |
<?php |
移除 BOM function
代码如下 | 复制代码 |
<?php |
由此上述 BOM = pack("CCC",0xef,0xbb,0xbf), 所以移除 BOM 的写法可用上面的 removeBOM function 或 下述其一:
■str_replace("锘�", '', $bom_content);
■preg_replace("/^锘�/", '', $bom_content);
另外看到 判断此字串是不是 UTF-8 的 function:
代码如下 | 复制代码 |
function isUTF8($string) |
linux系统中使用shell来解决
在详细讨论UTF-8编码中BOM的检测与删除问题前,不妨先通过一个例子热热身:
代码如下 | 复制代码 |
shell> curl -s http://www.111cn.net/ | head -1 | sed -n l 锘�<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> $ |
如上所示,前三个字节分别是357、273、277,这就是八进制的BOM。
代码如下 | 复制代码 |
shell> curl -s http://www.111cn.Net/ | head -1 | hexdump -C 00000000 ef bb bf 3c 21 44 4f 43 54 59 50 45 20 68 74 6d |...<!DOCTYPE htm| 00000010 6c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 |l PUBLIC "-//W3C| 00000020 2f 2f 44 54 44 20 58 48 54 4d 4c 20 31 2e 30 20 |//DTD XHTML 1.0 | 00000030 54 72 61 6e 73 69 74 69 6f 6e 61 6c 2f 2f 45 4e |Transitional//EN| 00000040 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 |" "http://www.w3| 00000050 2e 6f 72 67 2f 54 52 2f 78 68 74 6d 6c 31 2f 44 |.org/TR/xhtml1/D| 00000060 54 44 2f 78 68 74 6d 6c 31 2d 74 72 61 6e 73 69 |TD/xhtml1-transi| 00000070 74 69 6f 6e 61 6c 2e 64 74 64 22 3e 0d 0a |tional.dtd">..| |
如上所示,前三个字节分别是EF、BB、BF,这就是十六进制的BOM。 注:用到了第三方网站的页面,不能保证例子始终可用。 实际做项目开发时,可能会面对成百上千个文本文件,如果有几个文件混入了BOM,那么很难察觉,如果没有带BOM的UTF-8文本文件,可以用vi杜撰几个,相关命令如下:
设置UTF-8编码:
代码如下 | 复制代码 |
:set fileencoding=utf-8 |
添加BOM:
代码如下 | 复制代码 |
:set bomb |
删除BOM:
代码如下 | 复制代码 |
:set nobomb |
查询BOM:
代码如下 | 复制代码 |
:set bomb? |
如何检测UTF-8编码中的BOM呢?
代码如下 | 复制代码 |
shell> grep -r -I -l $'^锘�' /path如何删除UTF-8编码中的BOM呢? shell> grep -r -I -l $'^锘�' /path | xargs sed -i 's/^锘�//;q' |
推荐:如果你使用SVN的话,可以在pre-commit钩子里加上相关代码用以杜绝BOM。
代码如下 | 复制代码 |
#!/bin/bash REPOS="$1" SVNLOOK=/usr/bin/svnlook for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}'); do |
本文用到了很多shell命令
方法三,利用ultraedit编辑器直接修改文档
把出现空行的文档另存没没有BOM的格式就行了。
下图是ultraedit保存文档时的编码格式:
图2
选择里面的UTF8-无BOM,一切解决
在php中json_decode()函数可以把数组与json格式的数据相互转换,但json_decode()函数只支持UTF-8与ASCII编码,如果是gkb就会出问题,下面我们来看看问题分析与解决办法。
好像用json_decode()将数组/对象 序列化为JSON字符串的时候基本上只支持 UTF-8/ASCII编码。而我们有的站采用了GBK/GB2312编码,这个时候,直接使用json_encode/json_decode的时候就可能会出问题了。
代码如下 | 复制代码 |
<?php 结果 {"text":null,"status":1} |
比如转含有中文的字符字变成空(null),但有时候我们又必须得用gb编码而又要用到json_decode()转换的时候呢?什么办呢?自己昨晚写了一个不用数据库的一个添加音乐的小后台。也就是用php添加音乐,然后生成xml菜单。不用数据库那也得用一个方式来保存数据了。保存成文本的数据再可以直接拿出来用的,我想是把数组json_decode()用它转成json格式,用的时候再拿出来用它json_encode转回数组就可以了(可能最近弄js被json影响了,好像把数组序列化还有更好的方法,比如用:serialize()和unserialize()),呵呵,转正题。既然json_decode()在gb编码上转不了中文,那么我们可以先把中文转成英文编码的形式。那可以使用这个urlencode()转一下编码,再做json_decode()转换。使用的时候,再用urldecode()转成中文就可以了
代码如下 | 复制代码 |
/* |
xampp/phpMyAdmin/config.inc.php设置的密码(为空)冲突,从而使得用户无法登陆(在电脑为重新启动前能登录phpmyadmin,但是一旦机器重启后就无法登录了)。
解决办法也很简单:
1 修改xampp中关于phpmyadmin的配置文件
进入xampp的安装目录,修改xampp/phpMyAdmin/config.inc.php文件,找到并设置开始修改的密码,
例如$cfg['Servers'][$i]['password'] = '8888';
2 清除浏览器缓存,重新登录http://127.0.0.1/phpmyadmin/即可
另外,我们点击“权限”后可以看到整个数据库的用户如下,可以点击“操作”再次修改用户密码,相应地修改config.inc.php。
小结
w
其实这个就是对xampp/phpMyAdmin/config.inc.php的$cfg['Servers'][$i]['password'] = '8888';进入修改了,如果改了用户名也可以利用$cfg['Servers'][$i]['user'] = '你的用户名';这样修改哦。
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
SQL Server中row_number函数的常见用法示例详解
这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08- 分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21- 下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25
PHP编码转换函数mb_convert_encoding与iconv用法
文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25