动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   PHP → 阅读文章

 PHP中的日期及时间

作者来源: 
阅读 1313 人次 , 2006-3-29 4:13:00 


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

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:一个很方便的 XML 类
· 下一篇:通过Include和Require函数实现代码重用
· 模板引擎SMARTY
· pwin98下php安装调试又一例
· 目前国内的主流程序主要存在以下问题
· 封装对文章的各种操作(插入数据库、从数据库取出等等)
· 聊天室处理异常离线的方法


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077