0

これは非常に単純な問題だと思いましたが、どこにも解決策が見つかりませんでした。

PHP と mySQL でスケジューリング プログラムを作成しています。シフトには startTime と endTime があり、それぞれが TIME として mySQL に格納されます。

従業員の週の合計時間を合計したいので、次のことを試しました。

$shifts = [...] //shifts for the week
$totalTime = 0; //I've also tried "0:0:0" and strtotime("0:00:00");

for($d = 0; $d < 7; $d++){
    $start = strtotime($shift_types[$shifts[$d]]['ShiftType']['start_time']);
    $end = strtotime($shift_types[$shifts[$d]]['ShiftType']['end_time']);
    echo date("g:ia", $start) . ' / ' . date("g:i a", $end); 
    $totalTime += ($end-$start);
    }
}

これに関する問題は、$totalTime が適切な数にならないことです。これは、1970 年以降、PHP が $totalTime をタイムスタンプとして扱っているためだと思います。私が本当に欲しいのは正味時間の値だけです。それに関連付けられた日付っぽい値は必要ありません。

合計時間を表示していることに言及する必要があります

echo date("g:i", $totalTime);

9:30:00 の開始と 16:15:00 の終了で実行すると、「1:45」と表示されます。合計時間に触れていない場合(シフトがないため)、「7:00」と表示されます。

4

2 に答える 2

0

strtotimeUnix タイムスタンプ (その時間で表されるエポックからの秒数) を返します。したがって、秒単位で作業する ($totalTimeゼロから開始する) のが正しいアプローチです。時間数が必要な場合は、次のことを行う必要があり$totalTime = $totalTime / (60 * 60);ます。ループの後 (3600 秒 / 時間で割ります)。

于 2013-02-27T00:02:10.327 に答える
0

これはあなたがやりたいことだと思います:

$t1 = strtotime("2013-01-01 00:00:00");
$t2 = strtotime("2013-01-15 00:00:00");

echo round(($t2-$t1)/3600) ." hours". PHP_EOL;

または、私のブログ投稿http://webmonkeyuk.wordpress.com/2011/05/04/working-with-date-and-time-in-php/DateTimeで説明されているように、2 つのオブジェクトとメソッドを使用することもできます。diff()

于 2013-02-27T00:06:26.157 に答える