労働時間の計算時間と出席システム

アカウントに昼休みを取って絶対にオリジナルの、より多くの判定条件、持ち帰りください好きです。

        ///  <要約> 
        /// 時間働いた今日の有効数を計算する
         ///  </要約> 
        パブリック 静的進GetWorkHour(CheckOnModel todayCheckOn)
        { 
            // 今日働いた時間の有効数を計算する
             // 通常の状況は、午前9に早く動作します。 00が動作するように後半18時

            のDateTime amTime = Convert.ToDateTimeに(DateTime.Now.ToString(" YYYY-MM-DD ")+ " 午前9時01分" ); 
            日時pmTime = Convert.ToDateTime(DateTime.Now.ToString(に" MM-DD-YYYY ")+ " 午後6時00分" );

            NoonBreakStartTime日時 = Convert.ToDateTimeに(DateTime.Now.ToString(" YYYY-MM-DD ")+ " 12:30 " 
            のDateTime noonBreakEndTime = Convert.ToDateTime(DateTime.Now.ToStringに(" YYYY-MM-DD ") + " 13時30 " ); 


            CheckOnModel copyCheckOn = CheckOnModel.DeepCopy(todayCheckOn); 

            // 1時間の昼休みの控除
            BOOLの subtractOneHourを= trueに;
             // 午前9時から開始時間のパンチ作業を作業9時05分より前の
            IF(todayCheckOn.OnDutyTime .VALUE <= amTime)
            {
                copyCheckOn.OnDutyTime = amTime.AddMinutes( - 1 ); 
            } 
            // 作業昼食時の昼休みの終わりからカウントを開始
            IF(todayCheckOn.OnDutyTime.Value> = noonBreakStartTime && todayCheckOn.OnDutyTime.Value <= noonBreakEndTime)
            { 
                copyCheckOn.OnDutyTime = noonBreakEndTime; 
                subtractOneHour = falseに ; // なし控除昼休み
            } 

            // 昼食後に動作するように最初から
            IF(todayCheckOn.OnDutyTime.Value> = noonBreakEndTime)
            { 
                subtractOneHour falseに= ; // ない控除昼休みを
            } 

            // 18:00から開始時間パンチアウト
            IF(todayCheckOn.OffDutyTime.Value> = pmTime)
            { 
                copyCheckOn.OffDutyTime = pmTime; 
            } 
            // 昼休みの間の営業時間
            IF(copyCheckOn。 OffDutyTime.Value> = noonBreakStartTime && copyCheckOn.OffDutyTime.Value < noonBreakEndTime)
            { 
                copyCheckOn.OffDutyTime = noonBreakStartTime; 
                subtractOneHour = falseに ; // ない控除昼食
            }
             //早い時間よりランチラッシュアワー
            IF(copyCheckOn.OffDutyTime.Value < noonBreakStartTime)
            { 
                subtractOneHour = falseに ; // ない控除昼食
            } 

            IF (subtractOneHour)
            { 
                copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn .OnDutyTime.Value).TotalHours - 1 ); 
            } 
            
            { 
                copyCheckOn.WorkHour = Convert.ToDecimal((copyCheckOn.OffDutyTime.Value - copyCheckOn.OnDutyTime.Value).TotalHours); 
            } 
            //昼食時間は負であってもよいパンチを残す
            IF(copyCheckOn.WorkHourが< 0 
            { 
                copyCheckOn.WorkHour = 0 ; 
            } 

            // 控除時間を減算遡及成功したが、通常のパンチとして
            IF(== copyCheckOn.Status " Y " && copyCheckOn.EditMan =!新しい新規のGUID())
            { 
                copyCheckOn.WorkHour = 8。 - copyCheckOn.SubtractHour; 
            } 

            戻りcopyCheckOn.WorkHour; 
        }

 

ます。https://www.cnblogs.com/ushou/p/3687106.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34240520/article/details/93162613