php datediff 少了一天,php 时间函数DateDiff和DateAdd

php 时间函数DateDiff和DateAdd

(2012-09-04 18:23:27)

标签:

it

正如在文章一开始我所说的-写本文的原因是因为我在PHP中找不到类似ASP的DateDiff函数。在介绍完PHP是如何处理日期和时间,让我们将ASP中常用的两个函数移植到PHP。第一个函数是DateAdd。

根据Vbscript的文档,DateAdd(interval,number,date)函数的定义为“返回已添加指定时间间隔的日期。”

Inetrval为表示要添加的时间间隔字符串表达式,例如分或天;number为表示要添加的时间间隔的个数的数值表达式;Date表示日期。

Interval(时间间隔字符串表达式)可以是以下任意值:

yyyy year年

q Quarter季度

m Month月

y Day of year一年的数

d Day天

w Weekday一周的天数

ww Week of year周

h Hour小时

n Minute分

s Second秒

w、y和d的作用是完全一样的,即在目前的日期上加一天,q加3个月,ww加7天。

?

function DateAdd ($interval, $number, $date) {

$date_time_array = getdate($date);

$hours = $date_time_array["hours"];

$minutes = $date_time_array["minutes"];

$seconds = $date_time_array["seconds"];

$month = $date_time_array["mon"];

$day = $date_time_array["mday"];

$year = $date_time_array["year"];

switch ($interval) {

case "yyyy": $year +=$number; break;

case "q": $month +=($number*3); break;

case "m": $month +=$number; break;

case "y":

case "d":

case "w": $day+=$number; break;

case "ww": $day+=($number*7); break;

case "h": $hours+=$number; break;

case "n": $minutes+=$number; break;

case "s": $seconds+=$number; break;

}

$timestamp = mktime($hours ,$minutes, $seconds,$month ,$day,

$year);

return $timestamp;}

?

我们可以将上面的代码保存为dateadd.inc文件,然后运行以下代码:

?

include('dateadd.inc');

$temptime = time();

echo strftime( "%Hh%M %A %d %b",$temptime);

$temptime = DateAdd("n" ,50,$temptime);

echo "p";

echo strftime( "%Hh%M %A %d %b",$temptime);

?

我们将得到:

15h41 Saturday 03 Jun

16h31 Saturday 03 Jun

为PHP添加DateDiff函数

现在DateAdd已经完成,那么DateDiff呢?

根据文档,DateDiff(interval,date1,date2)函数的定义为“返回两个日期之间的时间间隔”。

Intervals

参数的用法与DateAdd函数中的相同。出于避免过于复杂的考虑,我们决定忽略Vbscript中DateDiff函数中其它复杂的参数,即其两个可选

的参数变量[firstdayofweek[,

firstweekofyear]](它们用于决定星期中第一天是星期天还是星期一和一年中第一周的常数。而且我们只允许intervals有以下五个

值:"w"(周)、"d"(天)、"h"(小时)、"n"(分钟) 和"s"(秒)。

Let's see what we can come up with: 下面的代码是我们所需要的:

?

Function DateDiff ($interval, $date1,$date2) {

// 得到两日期之间间隔的秒数

$timedifference = $date2 - $date1;

switch ($interval) {

case "w": $retval = bcdiv($timedifference ,604800); break;

case "d": $retval = bcdiv( $timedifference,86400); break;

case "h": $retval = bcdiv ($timedifference,3600); break;

case "n": $retval = bcdiv( $timedifference,60); break;

case "s": $retval = $timedifference; break;

}

return $retval;}

?

将上面的代码存为datediff.inc文件,然后运行下面的代码:

?

include('datediff.inc');

include('dateadd.inc');

$currenttime = time();

echo "Current time: ". strftime("%Hh%M %A %d %b"

,$currenttime)."br";

$newtime = DateAdd ("n",50 ,$currenttime);

echo "Time plus 50 minutes: ". strftime("%Hh%M %A %d %b"

,$newtime)."br";

$temptime = DateDiff ("n",$currenttime ,$newtime);

echo "Interval between two times: ".$temptime;

?

如果一切顺利,你可以看到以下结果:

Current time: 16h23 Saturday 03 Jun

Time plus 50 minutes: 17h13 Saturday 03 Jun

Interval between two times: 50

如果你在Unix机器上运行PHP,你必须编译PHP支持BC高精度函数。你必须从以下地址http://www.php.net/extra/number4.tar.gz下载BC库,然后将其解压到PHP4的根目录下,重新编译PHP,编译时要加上--enable-bcmath的选项。(详细说明见PHP4中README.BCMATH)。PHP4的Windows版本则不需要做任何修补即可直接使用BC高精度函数。

现在你已经得到处理日期和时间的函数,剩下的就是如何将其运用到你的PHP程序中。

php时间显示例

加入时间:2004-12-18 17:22:53 大小:1 KB 阅读次数:1564

第一种:简单(供学习用)

< ?PHP

$today=date("Y-m-d G:i:s");

echo

"

$today
";

?>

第二种:

Function formatTime($time,$type="1"){

switch($type){

case 1;#2002-06-0418:58 Tuesday

return date("Y.m.d H:i",$time)."

color=blue>".date("

l",$time)."

";

case 2;#June 2002

return date("M Y",$time);

case 3;#2002-06-04 18:58

return date("Y.m.d H:i",$time);

case 4;#06-04 AM

return date("m-d A",$time);

case 5;#06-04 18:58

return date("m.d H:i",$time);

}

}不知道对于两个以字符串格式存储的日期得比较会有什么结果,例如 ‘2007-07-12′ ‘2007-06-27′

,这种日期最好用什么方法来比较呢?就大小而论

leehao July 17th, 2006 1:33 am

$Date_1="2007-07-12";

$Date_2="2007-06-27";

$Date_explode_1=explode("-",$Date_1);

$Date_explode_2=explode("-",$Date_2);

$Day_1=mktime(0,0,0,$Date_explode_1[1],$Date_explode_1[2],$Date_explode_1[0]);

$Day_2=mktime(0,0,0,$Date_explode_2[1],$Date_explode_2[2],$Date_explode_2[0]);

$Days=round(($Day_1-$Day_2)/3600/24);

echo "您要的结果是 $Days 天哦";

?>

请问如何得到90天以后的日期

加入时间:2004-12-18 18:09:53 大小:1 KB 阅读次数:158

//获取今天的时间信息

$Y=date(Y);

$m=date(m);

$d=date(d);

//$m为月,$d为天,$Y为年,"+"号表示之后,用"-"号可以得到多少天前的日期,"Y年m月d日",只是显示的格式,你可以改成"Y-m-d",

$out_date1=date( "Y年m月d日", mktime(0,0,0,$m,$d+7,$Y) );//一周后

$out_date2=date( "Y年m月d日", mktime(0,0,0,$m,$d+14,$Y) );//二周后

$out_date3=date( "Y年m月d日", mktime(0,0,0,$m+1,$d,$Y) );//一个月后

$out_date4=date( "Y年m月d日", mktime(0,0,0,$m+2,$d,$Y) );//二个月后

$out_date5=date( "Y年m月d日", mktime(0,0,0,$m+3,$d,$Y) );//三个月后

$out_date6=date( "Y年m月d日", mktime(0,0,0,$m+6,$d,$Y) );//六个月后

$out_date7=date( "Y年m月d日", mktime(0,0,0,$m,$d,$Y+1) );//一年后

echo date("Ymd", time() + 90*86400);

echo date("Y-m-d",strtotime("2004-10-26 +90day"));

date("Y-m-d",strtotime("+90 day"));

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值