1

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

誰かがここに光を当ててくれることを願っています、ありがとう!

誰?

4

1 に答える 1