查看完整版本: 模拟SQLSERVER的两个函数:dateadd(),datediff()

lily 2007-8-2 13:31

模拟SQLSERVER的两个函数:dateadd(),datediff()

             <p><P>/文件名:date.inc.php3<BR>//在使用这两个函数前,要先将日期或日期时间转换成timestamp类型。<BR>//如:<BR>//$today=mktime(0,0,0,date("m"),date("d"),date("y"));<BR><BR>/****模拟sqlserver中的dateadd函数*******<BR>$part 类型:string<BR>取值范围:year,month,day,hour,min,sec<BR>表示:要增加的日期的哪个部分<BR>$n 类型:数值<BR>表示:要增加多少,根据$part决定增加哪个部分<BR>可为负数<BR>$datetime类型:timestamp<BR>表示:增加的基数<BR>返回 类型:timestamp<BR>**************结束**************/<BR>function dateadd($part,$n,$datetime){<BR>$year=date("y",$datetime);<BR>$month=date("m",$datetime);<BR>$day=date("d",$datetime);<BR>$hour=date("h",$datetime);<BR>$min=date("i",$datetime);<BR>$sec=date("s",$datetime);<BR>$part=strtolower($part);<BR>$ret=0;<BR>switch ($part) {<BR>case "year":<BR>$year+=$n;<BR>break;<BR>case "month":<BR>$month+=$n;<BR>break;<BR>case "day":<BR>$day+=$n;<BR>break;<BR>case "hour":<BR>$hour+=$n;<BR>break;<BR>case "min":<BR>$min+=$n;<BR>break;<BR>case "sec":<BR>$sec+=$n;<BR>break;<BR>default:<BR>return $ret;<BR>break;<BR>}<BR>$ret=mktime($hour,$min,$sec,$month,$day,$year);<BR>return $ret;<BR>}<BR><BR>/****模拟sqlserver中的datediff函数*******<BR>$part 类型:string<BR>取值范围:year,month,day,hour,min,sec<BR>表示:要增加的日期的哪个部分<BR>$date1,$date2 类型:timestamp<BR>表示:要比较的两个日期<BR>返回 类型:数值<BR>**************结束*(*************/<BR>function datediff($part,$date1,$date2){<BR>//$diff=$date2-$date1;<BR>$year1=date("y",$date1);<BR>$year2=date("y",$date2);<BR>$month2=date("m",$date2);<BR>$month1=date("m",$date1);<BR>$day2=date("d",$date2);<BR>$day1=date("d",$date1);<BR>$hour2=date("d",$date2);<BR>$hour1=date("d",$date1);<BR>$min2=date("i",$date2);<BR>$min1=date("i",$date1);<BR>$sec2=date("s",$date2);<BR>$sec1=date("s",$date1);<BR><BR>$part=strtolower($part);<BR>$ret=0;<BR>switch ($part) {<BR>case "year":<BR>$ret=$year2-$year1;<BR>break;<BR>case "month":<BR>$ret=($year2-$year1)*12+$month2-$month1;<BR>break;<BR>case "day":<BR>$ret=(mktime(0,0,0,$month2,$day2,$year2)-mktime(0,0,0,$month1,$day1,$year1))/(3600*24);<BR>break;<BR>case "hour":<BR>$ret=(mktime($hour2,0,0,$month2,$day2,$year2)-mktime($hour1,0,0,$month1,$day1,$year1))/3600;<BR>break;<BR>case "min":<BR>$ret=(mktime($hour2,$min2,0,$month2,$day2,$year2)-mktime($hour1,$min1,0,$month1,$day1,$year1))/60;<BR>break;<BR>case "sec":<BR>$ret=$date2-$date1;<BR>break;<BR>default:<BR>return $ret;<BR>break;<BR>}<BR>return $ret;<BR>}<BR><BR>}&nbsp;</P><TD class=title5 style="PADDING-TOP: 10px" width="60%"><H1><FONT size=1>dateadd(),datediff()两个函数的例程</FONT></H1></TD><P>&nbsp;//下面的一段<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B4%FA%C2%EB');" target="_self"><u><strong>代码</strong></u></a>显示一个从今天起15天的列表<BR>&lt;?php require("date.inc.php3"); ?&gt;<BR><BR>&lt;select name="train_date"&gt;<BR>&lt;?php<BR>$s_date=date("y-m-d");<BR>echo "&lt;option value='$s_date'&gt;$s_date&lt;/option&gt;";<BR>$today=mktime(0,0,0,date("m"),date("d"),date("y"));<BR>for ($i=1;$i&lt;15;$i++){<BR>$date=dateadd("day",$i,$today);<BR>$s_date=date("y-m-d",$date);<BR>echo "&lt;option value='$s_date'&gt;$s_date&lt;/option&gt;";<BR>}<BR>?&gt; <BR>&lt;/select&gt;</P></p>     <center><input type="image" onclick=copyToClipBoard() src="http://www.phpchina.com/images/phpcn_book_bu_tj.gif" border="0"></center>
页: [1]
查看完整版本: 模拟SQLSERVER的两个函数:dateadd(),datediff()
PageRank