計算工作日(jessie看)

來源:互聯網
上載者:User
現在還有問題
周一,周二不能做節假日
可能演算法上還有問題,等待你的更新...
/**
  * sports98
  * flyruns@hotmail.com (歡迎交流)
  */
================
<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>


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。