PHP中的日期及时间


Posted in PHP onNovember 23, 2006

PHP有很多便于使用的函数以显示及处理日期。 
要以某种特定格式显示日期或时间,可使用date()函数。它有两个参数:如何显示日期的格式以及代表你所要显示日期的时间戳。这个时间戳必须是先前所提到的从 1970 年起算的总秒数(如果你要使用当前时间可使用time()函数,此函数会返回“现在”的时间戳)。date() 有很多格式选项,如同C语言中的strftime()函数或Perl语言的POSIX::strftime()函数一样。 
<?php 
$birthday_stamp = mktime(19,45,0,3,10,1975); 
$birthday_formatted = date('F d, Y - g:ia',$birthday_stamp); 
echo "David was born on $birthday_formatted." 
?> 
会显示 
David was born on March 10, 1975--7:45 p.m. 
当然,如果你需要某已知的特定日期,这种复杂的格式函数并不会十分有用。因为你事先已经知道你的格式将会是什么。当在处理需要用户选择某日期的表单输出部分时,这些函数会比较有用: 
<SELECT NAME="when"> 
<?php 
$d = time(); 
for ($i = 0; $i < 10; $i++) { 
echo '<OPTION VALUE="'.$d.'">'.date('F d',$d); 
$d += 86400; 

?> 
</SELECT> 
以上会输出一个单选框,其中有十个选项——今天及以后九天。在程序循环开始之前,我们将当前时间存放于变量$d中。每一个<OPTION>值会被显示,而其中的值会是以Unix时间戳计算,且所显示出来的文字设定为月、日(“July 27”、“July 28”等等)。在显示值后,变量$d 会被加上 86,400(是一天二十四小时的总秒数——24小时*60分钟*60秒)。 
通过结合mktime()及date()函数,你就可以得出关于某特定用户输入日期的相关信息。那如果要寻找从某特定日期算起的第一个星期天(或者一周中的任意一天)呢?首先,先编写一个会输出适当格式的函数: 
<?php 
functiondisplay_form() { 
global $PHP_SELF; 
$dotw = array('Sunday','Monday','Tuesday','Wednesday','Thursday', 
'Friday','Saturday'); 
$months = array( 1 => 'January','February','March','April','May','June', 
'July','August','September','October','November','December'); 
?> 
<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET> 
Find the first 
<SELECT NAME="dotw"> 
<?php 
for ($i = 0; $i < 7; $i++) { 
echo "<OPTION> $dotw[$i]"; 

echo '</SELECT> after <SELECT NAME="month">'; 
for ($i = 1; $i <= 12; $i++) { 
echo "<OPTION VALUE=\"$i\"> $months[$i]"; 

echo '</SELECT> <SELECT NAME="day">'; 
for ($i = 1; $i <= 31; $i++) { 
echo "<OPTION> $i"; 

echo '</SELECT>, <SELECT NAME="year">'; 
$start_year = date('Y') - 10; 
$end_year = $start_year + 20; 
for ($i = $start_year; $i <= $end_year; $i++) { 
echo "<OPTION> $i"; 

echo '<INPUT TYPE="HIDDEN" NAME="stage" VALUE="process">'; 
echo '</SELECT> <INPUT TYPE="SUBMIT" VALUE="Do it!"7></FORM>'; 

?> 
这当中含有一些函数是我们到目前为止还没讨论过的。$months数组写得略微不同,因为需要让一月份索引为1,而非0。另外,由程序自动产生此表单要比将所有这个表单元素的值一一手动列出要更为轻松,因此,顶端的表单开始部分是display_form()函数中唯一不是属于 PHP模式的。此外,使用数据(“Y”)设置变量$start_year以及变量$end_year能够方便处理从今年算起十年前后的时间范围。 
以下是处理表单的函数: 
<?php 
function process_form() { 
global $dotw; 
global $month; 
global $day; 
global $year; 
$timestamp = mktime(0,0,0,$month,$day,$year); 
$next_dotw = ''; 
$next_timestamp = $timestamp; 
while ($next_dotw != $dotw) { 
$next_timestamp += 86400; 
$next_dotw = date('l',$next_timestamp); 

$formatted_first = date('F d, Y',$timestamp); 
$formatted_next = date('F d, Y',$next_timestamp); 
echo "The first $dotw after $formatted_first is $formatted_next."; 

?> 
首先,此代码将所得到的日期转化为Unix时间戳形式。如果我们需要更为谨慎的话,可以加入某些代码以确保所得到的日期在合法的日期范围内,不过在这此我们暂时没有必要这样做。 
当我们要寻找的“下一天”的星期数不是用户所输入的一个星期数时,循环继续。当不一样时,日期所代表的总秒数就会被增加(同样是86400秒=24小时*60分钟*60秒),然后那个秒数所代表的星期数就会被重新计算。 
一旦星期数一致,process_form() 函数就会输出一行正确消息: 
The first Sunday after June 25, 1999 is June 27, 1999. 
我们同样需要那个熟悉的主循环将这些函数捆绑在一起: 
<?php 
if (empty($stage)) { display_form(); } 
else { process_form(); } 
?> 
日期处理代码有时需要更为复杂以处理夏令时及不同时区,不过date()以及mktime()函数都是处理Unix时间戳变换的基本工具,它们在算法上操作简单,且以直观方式表达日期与时间。函数date()以及mktime()以机器所在时区来对时间进行操作。如果想使用格林威治时间(GMT),则可使用函数gmdate()以及gmmktime()。 
例如,对于一台处于美国东部夏令时的计算机(落后格林威治时间四小时): 
<?php 
$today = mktime(12,0,0,6,25,1999); 
echo 'Here it is '.date('g:i:s a, F d, Y',$today); 
echo ''; 
echo 'In GMT it is '.gmdate('g:i:s a, F d, Y',$today); 
?> 
将显示 
Here it is 12:00:00 pm, June 25, 1999 
In GMT it is 4:00:00 pm, June 25, 1999

PHP 相关文章推荐
Discuz!下Memcache缓存实现方法
May 28 PHP
php强制下载类型的实现代码
Apr 21 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
基于PHP常用函数的用法详解
May 10 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
PHP+Javascript实现在线拍照功能实例
Jul 18 PHP
php数据访问之查询关键字
May 09 PHP
浅谈php中urlencode与rawurlencode的区别
Sep 05 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 PHP
文件系统基本操作类
Nov 23 #PHP
header()函数使用说明
Nov 23 #PHP
如何使用脚本模仿登陆过程
Nov 22 #PHP
php5 and xml示例
Nov 22 #PHP
PHP中的类-什么叫类
Nov 20 #PHP
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 #PHP
PHP配置心得包含MYSQL5乱码解决
Nov 20 #PHP
You might like
给php新手谈谈我的学习心得
2007/02/25 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
JS中使用正则表达式g模式和非g模式的区别
2017/04/01 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
python实现超简单端口转发的方法
2015/03/13 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
JSF界面控制层技术
2013/06/17 面试题
长安大学毕业生自我鉴定
2014/01/17 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
商场租赁意向书
2014/07/30 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
一年级小学生评语大全
2014/12/25 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
2016党员学习《反对自由主义》心得体会
2016/01/22 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA