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 相关文章推荐
php中目录,文件操作详谈
Mar 19 PHP
php header功能的使用
Oct 28 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
PHP调用Linux命令权限不足问题解决方法
Feb 07 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
php实现的双色球算法示例
Jun 20 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
TP5框架实现一次选择多张图片并预览的方法示例
Apr 04 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
js实现仿爱微网两级导航菜单效果代码
2015/08/31 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
回调函数的意义以及python实现实例
2017/06/20 Python
单链表反转python实现代码示例
2018/02/08 Python
Django中信号signals的简单使用方法
2019/07/04 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
python实现广度优先搜索过程解析
2019/10/19 Python
为什么说python适合写爬虫
2020/06/11 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
如何将一个描述日期或日期/时间的字符串转换为一个Date对象
2015/10/13 面试题
师范生教师实习自我鉴定
2013/09/27 职场文书
材料加工工程求职信
2014/02/19 职场文书
合作协议书范本
2014/04/17 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
研讨会通知
2015/04/27 职场文书