文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>计算工作日

计算工作日

时间:2007-02-17  来源:PHP爱好者

现在还有问题
周一,周二不能做节假日
可能算法上还有问题,等待你的更新...
/**
* sports98
* [email protected] (欢迎交流)
*/
================
<html>
<head>
<title>计算工作日(计算一年内)</title>
</head>
<style type="text/css">
body,td {font-size:12px}
</style>
<body>
<form action="<?=$_SERVER[PHP_SELF]?>" method="post" name="form1">
<table cellpadding=0 cellspacing=0 border=0>
<tr><td colspan=2 height=30 align=center>工作日计算器(计算一年内)
<tr><td>开始日期:<td><input type="text" name="starttime" value="<?=date("Y")?>-01-01">
<tr><td>结束日期:<td><input type="text" name="endtime" value="<?=date("Y-m-d")?>">
<tr><td>周休息数:<td><input type="text" size=1 name="rest" value="2">天 始休日:
<select name="restday">
<option value="1">星期一</option>
<option value="2">星期二</option>
<option value="3">星期三</option>
<option value="4">星期四</option>
<option value="5">星期五</option>
<option value="6" selected>星期六</option>
<option value="7">星期七</option>
</select>
<tr><td valign=top>法定假期:<td>
<textarea name="ordainrest" rows=7>05-01&5
10-01&5</textarea>(&进行分隔)
<tr><td>缺席天数:<td><input type="text" size=1 name="absent" value="0">天(请假等未工作日)
<tr><td>加班天数:<td><input type="text" size=1 name="overtime" value="0">天
<tr><td>补假天数:<td><input type="text" size=1 name="supplytime" value="0">天
<input type="submit" value="计算数据">
</table>
</form>
<?php
if(is_array($_POST)){//有POST数据
$starttime=date("z",mktime(0,0,0,substr($_POST[starttime],5,2),substr($_POST[starttime],8,2),substr($_POST[starttime],0,4)));
$endtime=date("z",mktime(0,0,0,substr($_POST[endtime],5,2),substr($_POST[endtime],8,2),substr($_POST[endtime],0,4)));
$alltime=$endtime-$starttime+1;
echo "自开始日期到结束日期,共:".$alltime."天";
echo "<br>缺席天数:".$_POST[absent]."天";
echo "<br>加班日期:".$_POST[overtime]."天";
echo "<br>补假日期:".$_POST[supplytime]."天";
echo "<br>法定假期:<br>";
$tmpa=explode("n",$_POST[ordainrest]);
for($Tmpb=0;$Tmpb<count($tmpa);$Tmpb++){
$tmpc=explode("&",$tmpa[$Tmpb]);
echo "          ".$tmpc[0]." 休息 ".$tmpc[1]." 天<br>";
$tmpsize=date("z",mktime(0,0,0,substr($tmpc[0],0,2),substr($tmpc[0],3,2),date("Y")));//节假日的日期数据
if($tmpsize>=$starttime && $tmpsize<=$endtime){
$alltime=$alltime-$tmpc[1];//从总的工作日中去掉法定日期
}
}
//调试点    
//    echo "<h3>$starttime $endtime</h3>";

$alltime-=$_POST[absent];//扣除缺席天数
$alltime+=$_POST[overtime];//加上加班日期
$alltime-=$_POST[supplytime];//去掉补充的假期

//计算周休息日
$fweek=date("w",mktime(0,0,0,substr($_POST[starttime],5,2),substr($_POST[starttime],8,2),substr($_POST[starttime],0,4)));//获得开始日期的周数
$eweek=date("w",mktime(0,0,0,substr($_POST[endtime],5,2),substr($_POST[endtime],8,2),substr($_POST[endtime],0,4)));//结束周数
//这里要判断一下开始的星期天数(要求获得第一周的日期数)
if($fweek<$_POST[restday]){//不是休息日(指定的工作休息日),在指定休息日前
$ctmp=abs($_POST[restday]-$fweek);
$runday=date("d",mktime(0,0,0,substr($_POST[starttime],5,2),$ctmp+substr($_POST[starttime],8,2),substr($_POST[starttime],0,4)));
//获得第一周的日期
}else{//再指定休息日后(e.g. $fwwk=6 $_POST[restday]=2)
$ctmp=abs($fweek-$_POST[restday]);
$runday=date("d",mktime(0,0,0,substr($_POST[starttime],5,2),$ctmp+substr($_POST[starttime],8,2),substr($_POST[starttime],0,4)));
}
//调试点    
//    echo "<h3>$runday $ctmp $_POST[restday] $fweek</h3>";
for($ttmpa=0;;$ttmpa++){
//将当前的节假日向后推7日,进行判断  最终$ttmpa为节假日数
$cday=date("z",mktime(0,0,0,substr($_POST[starttime],5,2),$runday+7*$ttmpa,substr($_POST[starttime],0,4)));
if($cday>$endtime){
break;
}
}
echo "<br>开始日期:".date("Y-m-d 星期w",mktime(0,0,0,substr($_POST[starttime],5,2),substr($_POST[starttime],8,2),substr($_POST[starttime],0,4)));;
echo "<br>结束日期:".date("Y-m-d 星期w",mktime(0,0,0,substr($_POST[endtime],5,2),substr($_POST[endtime],8,2),substr($_POST[endtime],0,4)));;
echo "<br>共计周末休息:".$ttmpa."×".$_POST[rest]."=".$ttmpa*$_POST[rest]."天<span onclick="if(document.all['allweek'].style.display==''){this.innerHTML='(+)';document.all['allweek'].style.display='none';}else{this.innerHTML='(-)';document.all['allweek'].style.display='';}" style="cursor:hand">(+)</span>";
echo "<div id="allweek" style="display:'none'">";
for($TTmpa=0;$TTmpa<$ttmpa;$TTmpa++){
$dday=date("Y-m-d 星期w",mktime(0,0,0,substr($_POST[starttime],5,2),$runday+7*$TTmpa,substr($_POST[starttime],0,4)));
echo "$dday<br>";
}
echo "</div>";
if($fweek==6){//周六
}else if($fweek==0){//周日,则总休息日仅仅去一天休息日
$alltime+=1;//增加一天
}
$allcday=$ttmpa*$_POST[rest];//总的工作休息日
$alltime-=$allcday;
echo "<hr size=1>有效的工作日:<font color=red>$alltime</font>";
}
?>
</body>
</html>


php爱好者站 http://www.phpfans.net dreamweaver|flash|fireworks|photoshop.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载