私は従業員が残業を救うことができるようにシンプルなシステムを開発していますので、月末には余分な時間を費やしています。時間を区別する方法は?
通常の時間は1とカウントされますが、夜間の時間は23:00から07:00まではそれぞれ1,25時間である必要があります。
私たちは、その日、開始日と終了日を紹介するように要求しています。だから、私はこのような配列を持っていると考えていた:
$hours= array(
'0' => true, '1' => true, '2' => true, '3' => true, '4' => true, '5' => true, '6' => true,
'7' => false, '8' => false, '9' => false, '10' => false, '11' => false, '12' => false, '13' => false,
'14' => false, '15' => false, '16' => false, '17' => false, '18' => false, '19' => false, '20' => false,
'21' => false, '22' => false, '23' => true
);
ので、時間が特別であるか、それはこのようなループでない場合は基本的に私がテスト:
$normals = 0;
$specials = 0;
$hour_since = '23:00:00';
$hour_since_expl = explode(':',$hour_since);
$hour_to = '23:15:00';
$hour_to_expl= explode(':',$hour_to);
$date = $fecha = '2012-03-14';
$datetime_since= strtotime($date ." ".$hour_since);
$datetime_to= ((int) $hour_to_expl[0] > (int) $hour_to_expl[0]) ?
strtotime(date("Y-m-d h:i:s", strtotime($date ." ".$hour_to)) . " +1 day") :
strtotime($date." ".$hour_to);
$difference = $datetime_to - $datetime_since;
$hours_difference = $difference/SECONDS_PER_HOUR; //60*60
for ($i = 0; $i <= $difference; $i++){
$hour = $i + (int) $hour_since_expl [0];
if ($hours[$hour]) //Special hour here... Pay more!
$specials++;
else
$normals++;
}
しかし、問題時間が正確でなく、22:30のようなどこかで始まって00:30に終わったときは、0.5時間は特別ではありません。私は心に苦しんできましたが、私は解決策を見つけることができません。
誰かにアイデアはありますか?
:その他のコードがあります。
私はPHPに精通していませんので、次のことができない場合は私を許してください。なぜループでそれを行うのですか?残業期間と定期的期間を取得し、料金を掛けるだけではどうですか? –
どうすればいいですか?どのようにその期間を取得しますか? –
開始時刻を15:15、終了時刻を22:45とします。まず、開始時刻をその時刻以降に最も近いHOURに変換し、endtimeをその時刻の前またはその直前のHOURに変換します。だから私たちは15:00と22:00になる。これらの時間にループを使用して、差異時間(15:15-15:00または22:45-22:00)が残業の場合は、残業* numMins/60は標準* numMins/60。私はPHPに精通していないので、擬似コードでこれを行う必要がありました –