0

2 時間の時差を計算する関数を作成しようとしていますが、WORKING HOURS のみが含まれます。これは、ジョブが完了するまでにかかる時間を追跡するプロジェクト用です。

勤務時間は月曜日から金曜日の午前 9 時から午後 5 時です。

  • 例 1
    ジョブが午後 4 時 50 分に開始され、誰かが翌日の午前 10 時にページを見た場合、タイマーは 1 時間 10 分 0 秒と表示します。
  • 例 2
    ジョブが午後 6 時 23 分に開始され、誰かが翌日の午前 9 時 30 分にページを見た場合、タイマーは 30 分 0 秒と表示します。
  • 例 3
    ジョブが金曜日の午後 1 時 20 分に開始され、誰かが火曜日の午後 4 時にページを見た場合、タイマーは 18h 40m 0s と表示します。(土・日は除く!)
4

1 に答える 1

1

これは少し圧倒されるかもしれませんが、@Amine Matmati が提供するリンクには、必要なすべてのツールがあります。これを使用すると、開始のタイムスタンプから現在までの毎日を簡単に見て回ることができ、週末や営業時間外をスキップできます。

少し不格好ですが、うまくいきます。

strtotime(str, timestamp)ほぼ平易な英語のコマンドである文字列と、必要に応じて参照タイムスタンプを受け取ります。これは、現在のタイムスタンプから最後のタイムスタンプまで実行するために使用するものです。

すなわち。strtotime('end of the working day', timestamp of when the job started);

[NB: 'end of the day' は受け入れ可能な文字列ではありません。それについては、下部にある PHP マニュアルへのリンクを確認してください。それがどのように役立つかを確認したかっただけです]

したがって、元のタイムスタンプから現在までのループを作成すると、作業時間数を数えることができます。

疑似コードでロジックを示します。

$Present is present timestamp;
$Start is the starting timestamp;
$Hours will be the accumulated working hours between starting timestamp and present timestamp;

loop while present timestamp not reached {

if $Start does not occur on the same day as $Present{
  if $Start occurs inside of working hours {
    find the time to the end of the working day;
    add that time to $Hours;
  }

  find next day;
  if the next day is Saturday{
    update $Start to the working start of next Monday;
  }
  else{
    update $Start to the working start of the next day;
  }
}
else{
  find the time between $Start and $Present;
  add that time to $Hours;
  update $Start to $Present or Break;
  }
}

開始時刻が週末に発生せず、現在のタイムスタンプと同じ日の営業時間外 (つまり、前) に発生しないことを前提としていますが、それらの制御は非常に簡単です。

これであなたの友達になるものは次のとおりです。

@Amine Matmati のリンク:週末の時間を無視した 2 つの日付の時差

PHP date(): http://php.net/manual/en/function.date.php
PHP strtotime(): http://www.php.net/manual/en/function.strtotime.php

ハッピーコーディング!

于 2013-02-19T15:27:59.277 に答える