starttime と endtime があり、常に正確な :00 または :15、:30、:45 に開始または終了します。
例えば:
00:30 21-05-2012 // startdate and time
18:15 22-05-2012 // enddate and time (+1 day)
時間が夕方または夜の時間になると、追加の%を請求する必要があります.
だから私は2つの配列を持っています.1つは夕方の時間用で、もう1つは夜の時間用です。
$eveningHours = array(
'18:00',
'18:15',
'18:30',
// etcetera
'00:00'
);
上記の配列は基本的に 18:00 から 00:00 までの時間をカバーしています。
夜間も同様で、00:00 から 07:00 までの時間をカバーしています。
開始時刻と終了時刻は常に正確な :00 または :15、:30、:45 に着陸するため、開始日時と終了日時の間で 15 分間隔でループを実行し、各間隔で次のことを確認します。現在の間隔時間は夜間/夜間時間であり、その後、夜間/夜間時間カウンターに +15 を追加し、最後にこれを 60 で割って合計時間を取得します。
しかし、どういうわけか、常に 15 分から多く、または 15 分から少なく... 私はほとんどすべてを試しましたが、適切に動作させることはできません..
たとえば、開始時刻が 00:30 の場合、最初の間隔にすでに 15 分追加されています。
00:30 (カウンター: +15) 00:45 (カウンター: +15)
これは合計 30 分ですが、00:30 から 00:45 まで働いた場合、オフコースは 15 分しかないはずです。それを修正する方法が必要です..カウンターを-15分で開始するか、開始時間または終了時間が1時間の範囲内にあるかどうかを確認してから、カウンターを-15または+に設定することで、すでに多くのことを試しました15分..しかし、これもうまくいきません。
EDITこれはループの基本です:
$start_time = mktime($_POST['worked_start_hour'], $_POST['worked_start_min'], 0, date("m"), date("d", strtotime("+1 days")), date("Y")); // +1 day for testing purpose
$end_time = mktime($_POST['worked_end_hour'], $_POST['worked_end_min'], 0, date("m"), date("d", strtotime("+2 days")), date("Y")); // +2 days for testing purpose
$date['start_h_i'] = date("Y-m-d H:i", $start_time); # Start date: yyyy-mm-dd hours:minutes
$date['end_h_i'] = date("Y-m-d H:i", $end_time); # End date: yyyy-mm-dd hours:minutes
$counter['eveningMinutes'] = 0;
$counter['nightMinutes'] = 0;
$eveningHours = array(
'18:00',
'18:15',
'18:30',
'18:45',
'19:00',
'19:15',
'19:30',
'19:45',
'20:00',
'20:15',
'20:30',
'20:45',
'21:00',
'21:15',
'21:30',
'21:45',
'22:00',
'22:15',
'22:30',
'22:45',
'23:00',
'23:15',
'23:30',
'23:45',
'00:00'
);
$nightHours = array(
'00:00',
'00:15',
'00:30',
'00:45',
'01:00',
'01:15',
'01:30',
'01:45',
'02:00',
'02:15',
'02:30',
'02:45',
'03:00',
'03:15',
'03:30',
'03:45',
'04:00',
'04:15',
'04:30',
'04:45',
'05:00',
'05:15',
'05:30',
'05:45',
'06:00',
'06:15',
'06:30',
'06:45',
'07:00'
);
while (strtotime($date['start_h_i']) <= strtotime($date['end_h_i'])) {
if (in_array(date("H:i", strtotime($date['start_h_i'])), $eveningHours)) {
$counter['eveningMinutes'] = $counter['eveningMinutes'] + 15;
}
if (in_array(date("H:i", strtotime($date['start_h_i'])), $nightHours)) {
$counter['nightMinutes'] = $counter['nightMinutes'] + 15;
}
$date['start_h_i'] = date ("Y-m-d H:i", strtotime("+15 minutes", strtotime($date['start_h_i']))); // 15 minutes interval
} // end while
誰かがここに光を当ててくれることを願っています、ありがとう!
誰?