首页 > 开发 > PHP > 正文

计算工作日(jessie看)

2024-05-04 22:55:59
字体:
来源:转载
供稿:网友
现在还有问题
周一,周二不能做节假日
可能算法上还有问题,等待你的更新...
/**
  * 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>


收集最实用的网页特效代码!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表