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代码的53条建议
Mar 27 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php curl的深入解析
Jun 02 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
PHP后台实现微信小程序登录
Aug 03 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP 字符串 小常识
2009/06/05 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
浅谈php命令行用法
2015/02/04 PHP
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
实例讲解使用原生JavaScript处理AJAX请求的方法
2016/05/10 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
wxPython使用系统剪切板的方法
2015/06/16 Python
Python 移动光标位置的方法
2019/01/20 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
个人简历中的自我评价范例
2013/10/29 职场文书
工程安全员岗位职责
2014/03/09 职场文书
领导接待方案
2014/03/13 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
绩效考核实施方案
2014/03/18 职场文书
批评与自我批评范文
2014/10/15 职场文书
老兵退伍感言
2015/08/03 职场文书
班主任班级管理心得体会
2016/01/07 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
SQL语句多表联合查询的方法示例
2022/04/18 MySQL
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers