PHP 时间与日期
PHP提供了大量的内置函数,使开发者在时间的处理上游刃有余,大大提高了工作效率。
介绍一些常见的PHP日期和时间函数以及日期和时间的处理。
经常使用的日期和时间处理函数
|
函 数 |
说 明 |
|
checkdate |
验证时间函数。推断时间是否有效,有效返回true,否则返回false |
|
date_default_timezone_get |
取得脚本日期时间函数所使用的默认时区 |
|
date_default_timezone_set |
设定日期时间函数的默认时区 |
|
date |
格式化一个本地时间/日期 |
|
getdate |
获取日期/时间信息 |
|
gettimeofday |
获取当前时间 |
|
localtime |
获取本地时间 |
|
microtime |
返回当前时间戳和微秒数 |
|
mktime |
取得一个UNIX时间戳 |
|
strtotime |
将不论什么英文文本的日期时间描写叙述解析为UNIX时间戳 |
|
time |
返回当前的UNIX时间戳 |
系统时区设置
在学习过程中发现通过date()函数获取到的时间跟本地时间不一样,这是因为PHP5对date()函数进行了重写,因此,眼下的日期时间函数比系统时间少8个小时。
在PHP语言中默认设置的是标准的格林威治时间(即採用的是零时区)。更改PHP语言中的时区设置主要有下面两种方法:
1. 改动php.ini文件里的设置,找到[date]下的;date.timezone = 选项,将该项改动为date.timezone=Asia/Hong_Kong,然后又一次启动apacheserver。
2. 在应用程序中,使用时间日期函数之前加入例如以下函数:
date_default_timezone_set(“Asia/Hong_Kong”);设置完毕后,date()函数就能够正常使用了,不会再出现时差问题。
UNIX时间戳
时间戳是文件属性中的创建、改动、訪问时间。数字时间戳服务(digital time stamp service, DTS)是web站点安全服务项目之中的一个,能提供电子文件的日期和时间信息的安全保护。
时间戳是一个经加密后形成后的凭证文档。它包含3个部分:
² 须要加入时间戳的文件用Hash编码加密形成摘要。
² DTS接受文件的日期和时间信息。
² 对接受的DTS文件加密。
数字时间是由认证单位DTS来加入的。以DTS接收到文件的时间为根据。时间戳的作用原理是通过其它加密法将时间的数值转换为加密的数值,时间变化后加密的数值也随之变化。
时间戳的长处是:变化的加密数值来防止数值被窃取后非法反复利用,也就起到了加密的作用。时间戳主要依赖于时间,在约定的一段时间内产生唯一的一个数值。
mktime()函数
语法:
int mktime(int hour, int minute, int month, int day, int year, int [is_dst])
|
參 数 |
说 明 |
|
hour |
小时数 |
|
minute |
分钟数 |
|
second |
秒数(一分钟之内) |
|
month |
月份数 |
|
day |
天数 |
|
year |
年份数 |
|
is_dst |
參数is_dst在夏令时能够被设置为1。假设不是则设置为0;假设不确定是否为夏令时则设置为-1(默认值) |
注意:有效的时间戳典型范围是格林尼治时间1901年12月13日20:45:54~2038年1月19日03:13:07(此范围符合32位有符号整数的最小值和最大值)。在Windows系统中此范围限制为从1970年1月1日~2038年1月19日。
date()函数
date(string format,int timestamp)
该函数将返回參数timestamp依照指定格式而产生的字符串。当中參数timestamp是可选的,假设省略,则使用当前时间。
format參数能够使开发者按其指定的格式输出时间日期。
date_default_timezone_set(PRC); //设置北京时间.
format 字符 |
说明 | 返回值样例 |
|---|---|---|
| 日 | --- | --- |
| d | 月份中的第几天,有前导零的 2 位数字 | 01 到 31 |
| D | 星期中的第几天,文本表示,3 个字母 | Mon 到 Sun |
| j | 月份中的第几天。没有前导零 | 1 到 31 |
| l("L"的小写字母) | 星期几,完整的文本格式 | Sunday 到 Saturday |
| N | ISO-8601 格式数字表示的星期中的第几天(PHP 5.1.0 新加) | 1(表示星期一)到 7(表示星期天) |
| S | 每月天数后面的英文后缀,2 个字符 | st,nd。rd 或者 th。能够和 j 一起用 |
| w | 星期中的第几天,数字表示 | 0(表示星期天)到 6(表示星期六) |
| z | 年份中的第几天 | 0 到 365 |
| 星期 | --- | --- |
| W | ISO-8601 格式年份中的第几周,每周从星期一開始(PHP 4.1.0 新加的) | 比如:42(当年的第 42 周) |
| 月 | --- | --- |
| F | 月份。完整的文本格式,比如 January 或者 March | January 到 December |
| m | 数字表示的月份,有前导零 | 01 到 12 |
| M | 三个字母缩写表示的月份 | Jan 到 Dec |
| n | 数字表示的月份。没有前导零 | 1 到 12 |
| t | 给定月份所应有的天数 | 28 到 31 |
| 年 | --- | --- |
| L | 是否为闰年 | 假设是闰年为 1,否则为 0 |
| o | ISO-8601 格式年份数字。这和 Y 的值同样。仅仅除了假设 ISO 的星期数(W)属于前一年或下一年,则用那一年。
(PHP 5.1.0 新加) |
Examples: 1999 or 2003 |
| Y | 4 位数字完整表示的年份 | 比如:1999 或 2003 |
| y | 2 位数字表示的年份 | 比如:99 或 03 |
| 时间 | --- | --- |
| a | 小写的上午和下午值 | am 或 pm |
| A | 大写的上午和下午值 | AM 或 PM |
| B | Swatch Internet 标准时 | 000 到 999 |
| g | 小时,12 小时格式,没有前导零 | 1 到 12 |
| G | 小时。24 小时格式。没有前导零 | 0 到 23 |
| h | 小时,12 小时格式,有前导零 | 01 到 12 |
| H | 小时,24 小时格式,有前导零 | 00 到 23 |
| i | 有前导零的分钟数 | 00 到 59> |
| s | 秒数。有前导零 | 00 到 59> |
| u | 毫秒 (PHP 5.2.2 新加)。须要注意的是 date() 函数总是返回 000000 由于它仅仅接受 integer 參数。 而 DateTime::format() 才支持毫秒。 |
演示样例: 654321 |
| 时区 | --- | --- |
| e | 时区标识(PHP 5.1.0 新加) | 比如:UTC,GMT,Atlantic/Azores |
| I | 是否为夏令时 | 假设是夏令时为 1,否则为 0 |
| O | 与格林威治时间相差的小时数 | 比如:+0200 |
| P | 与格林威治时间(GMT)的区别。小时和分钟之间有冒号分隔(PHP 5.1.3 新加) | 比如:+02:00 |
| T | 本机所在的时区 | 比如:EST,MDT(【译者注】在 Windows 下为完整文本格式,比如"Eastern Standard Time",中文版会显示"中国标准时间")。 |
| Z | 时差偏移量的秒数。UTC 西边的时区偏移量总是负的,UTC 东边的时区偏移量总是正的。 | -43200 到 43200 |
| 完整的日期/时间 | --- | --- |
| c | ISO 8601 格式的日期(PHP 5 新加) | 2004-02-12T15:19:21+00:00 |
| r | RFC 822 格式的日期 | 比如:Thu, 21 Dec 2000 16:01:07 +0200 |
| U | 从 Unix 纪元(January 1 1970 00:00:00 GMT)開始至今的秒数 | 參见 time() |
getdate()函数
该函数返回数组形式的日期时间信息,假设没有时间戳,则以当前时间为准。
|
元 素 |
说 明 |
|
seconds |
秒。返回值0~59 |
|
minutes |
分钟,返回值为0~59 |
|
hours |
小时。返回值为0~23 |
|
mday |
月份中第几天。返回值为1~31 |
|
wday |
星期中第几天,返回值为0(星期天)~6(星期六) |
|
mon |
月份数字,返回值为1~12 |
|
year |
4位数字表示的完整年份,返回值加2000或2008 |
|
yday |
一年中第几天,返回值0~365 |
|
weekday |
星期几的完整文本表示,返回值为Sunday~Saturday |
|
month |
月份的完整文本表示。返回值为January~December |
|
0 |
返回从UNIX纪元開始的秒数 |
比較两个时间的大小
在实际开发中经常遇到推断两个时间的大小,PHP中的时间是不能够直接来进行比較的。所以,首先要将时间输出为时间戳的格式。然后再进行比較,这是经常使用到的方法。
有两个函数都能够实现这个功能,这里使用strtotime()函数,该函数能够将不论什么英文文本的日期时间描写叙述解析为UNIX时间戳。 该函数的语法为:
int strtotime(string time, int now)
该函数有两个參数。假设參数time的格式是绝对时间。则now參数不起作用;假设參数time的格式是相对时间。那么其相应的时间就是參数now来提供的,假设没有提供參数now,相应的时间就是当前时间。
假设解析失败。则返回-1.
计算页面脚本的执行时间
在浏览站点时,常常会用到搜索引擎。在搜索信息时。细心的用户会发现。在搜索结果的最下方,一般都有“搜索时间为……秒”的字样。这里使用到了microtime()函数,该函数返回当前UNIX时间戳和微秒数。返回格式为msec sec的字符串,当中sec是当前的UNIX时间戳,msec为微秒数。
该函数的格式为:
string microtime(void)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head> <body>
<?php
// 设置时区
date_default_timezone_set('Asia/Chongqing'); // 指定时间到UNIX纪元的差值
echo mktime(1, 2, 3, 4, 5, 2006)."<br>"; // 当前时间到UNIX纪元的差值
echo time()."<br>"; // 格式化时间
echo date("Y-m-d H-i-s")."<br>"; // 时间数组
$arrays = getdate();
print_r($arrays)."<br>"; // 检測时间
var_dump( checkdate(7, 9, 2015) ); "<br>"; // 本地化时间戳,strtotime还可用于时间的大小比較
setlocale(LC_TIME, 0);
echo strftime('%Y,%m,%d', strtotime('2000-04-00'))."<br>"; // 微妙
echo microtime(true); function run_time()
{
list($msec, $sec) = explode(" ", microtime());
return ((float)$msec + (float)$sec);
} $start_time = run_time();
$time1 = strtotime(date( "Y-m-d H:i:s"));
$time2 = strtotime("2008-2-3 17:10:00");
$time3 = strtotime("2008-8-8");
$sub1 = ceil(($time2 - $time1) / 3600); //60 * 60
$sub2 = ceil(($time3 - $time1) / 86400); //60 * 60 * 24
echo "离放假还有<font color=red> $sub1 </font>小时!!!" ;
echo "<p>";
echo "离北京奥运开幕还有<font color=red>$sub2 </font>天!!!";
$end_time = run_time();
echo '耗时'.($end_time - $start_time);
?>
</body>
</html>
PHP 时间与日期的更多相关文章
- Android随笔之——Android时间、日期相关类和方法
今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...
- Lua库之时间和日期操作
Lua库之时间和日期操作 (2010-02-07 18:41:20) 转载▼ os.time() <== 返回当前系统的日历时间os.date() <== 返回本地化的时间字符串,这里是& ...
- date 显示或设置系统时间和日期
显示或设置系统时间和日期 date [options] [+format] date [options] [new date] date用来显示系统的时间和日期,超级用户可以使用date来更改系统时钟 ...
- java时间和日期类型
在java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar,此外,在JDBC API中还提供了3个扩展类,java.UtilDate类的子类:java. ...
- iOS中的时间和日期
怎么说?时间和日期不是了不起的属性.了不起的功能,但是,我们决不能够因此就“冷落”它. 一:怎么“搞到货”--如何获取时间.日期 //-=-==当前时间------默认显示“0时区”时间 NSDate ...
- Python 时间和日期模块的常用例子
获取当前时间的两种方法 import datetime,time now = time.strftime("%Y-%m-%d %H:%M:%S") print now now = ...
- Java 对时间和日期的相关处理
1. 获取当前系统时间和日期并格式化输出 import java.util.Date; import java.text.SimpleDateFormat; public class NowStrin ...
- PHP date 格式化一个本地时间/日期
PHP date 格式化一个本地时间/日期 date (PHP 4, PHP 5) date — 格式化一个本地时间/日期 说明 string date ( string $format [, int ...
- java JDK8 学习笔记——第13章 时间与日期
第十三章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 1.格林威治标准时间GMT 格林威治标准时间的正午是太阳抵达天空最高点之时.现在已经不作为标准时间使用. 2.世界时UT世界时 ...
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- openssh相关
openssh相关 DSA RSA,非对称加密,产生公钥.私钥,前者存放在remote,后者存放在local,ssh-keygen产生公钥私钥时,提示输入私钥密码,防止私钥泄露被盗 ssh ...
- 黑莓10开发101:Native平台
为黑莓10开发游戏或应用程序有多种方法.这是件好事,不过如果你不是在黑莓平台下进行开发,或者你仅熟悉基于旧的Java的开发平台,也许你会感到无所适从.你将作何选择?从哪里着手? 促成你做出决定的因素有 ...
- Netty游戏服务器之三搭建Unity客户端
既然已经写完了相关的服务器处理类,那么我们就来搭建客户端测试一下. 打开我们的unity3d,然后新建一个c#脚本,取名为MainClient. public class MainClient : M ...
- mongo 实时同步工具 mongosync
文档地址:https://github.com/Qihoo360/mongosync/wiki/%E4%BD%BF%E7%94%A8%E6%A0%B7%E4%BE%8B #数据全量备份mongodum ...
- 用latex写毕业论文
用 LaTeX 写漂亮学位论文(from wloo) 序 一直觉得有必要写这样一篇文章,因为学位论文从格式上说更像一本书,与文章 的排版不同,不仅多出目录等文章没有的部分,而且一般要设置页眉页脚方便阅 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- Unity3D新手教学,让你十二小时,从入门到掌握!(一) [转]
http://blog.csdn.net/aries_h/article/details/47307799 版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ ...
- Nginx部署前端代码实现前后端分离
实现前后端分离,可以让前后端独立开发.独立部署.独立单测,双方通过JSON进行数据交互. 对于前端开发人员来说,不用每次调试都需要启动或配置Java/Tomcat运行环境:对于后端开发人员来说 ,也不 ...
- 登录Tomcat控制台
在http://localhost:8080界面中,右上角有三个按纽对应着三个控制台:Server Status控制台,Manager App控制台和Host Manager控制台.Server St ...
- 批量修改mp3文件的title等
批量修改mp3文件的title等 不是改文件名哦: 下载地址:https://mp3tag.en.softonic.com/ 帮助文档:file:///C:/Program%20Files%20(x8 ...