2017-11-12 9 views
0

私は2つのサンプルのタイムエントリのMySQLの結果を持ってデータベース結果の時間部分を追加しますか?

など、月、ユーザが、週によってシステムで費やすどのくらいの時間を合計し、私のアプリケーションで機能を追加する
$select = "SELECT TOTAL_HRS FROM timeclock WHERE USERNAME = '$sessuser' AND CLOCK_OUT BETWEEN '$dbpast' AND '$dbnow'"; 

をしようとしています: 00:00hr:04min:08sおよび00:00hr:12min:52s。ユーザーはもっと多くを持つことができます。

TOTAL_HRSここで私がこれまで持っているものだ、それは0

を返し、その上)(varchar型の列であるので、私は合計を置くとき:

while($row = $query->fetch_assoc()){ 

    print_r($row); 
$sanitized = preg_replace("/[^0-9:]+/", "", $row); 
    print_r($sanitized); 
$joinarr = implode(':', $sanitized); 
$parts = explode(':', $joinarr); 
    print_r($parts); 

$zerodate = new DateTime('0000-01-01 00:00:00'); 
$addhrs += $parts[1]; 
$addmin += $parts[2]; 

print_r($addhrs); 

$interval = $zerodate->add(new DateInterval('P' .$parts[0].'DT'.$parts[1].'H'.$parts[2].'M'.$parts[3].'S')); 

$totalhrs = $interval->format('%D:%Hhr:%Imin:%Ss'); 
print_r($totalhrs); 

}

私は返されたファンキーなジャンクを入手してください。0%Sat:%0012Sat, 01 Jan 0000 00:12:52 +0100:%001121:%st52

返信する必要があるもの:00:00hr:17min:00sのようなものです。私はこれを保存する予定はなく、ページに表示したいだけです。

私はこれを理解する助けが必要です。私は良い方法があると確信しています。私は機能がそれほど素晴らしいわけではありません。または、jqueryを使用して結果を送信し、そこで処理する必要がありますか?どちらの側でDateTimeを処理する方が効率的ですか?助けが大いに評価されるだろう。ありがとう!

+0

を与えるTIMEDIFF()を使用している場合がありますかおそらく秒単位で、または開始時刻と終了時刻のタイムスタンプとして保存する方が簡単でしょう。 – chris85

+0

...私はそれを考えなかった。笑。データベースのDateTimeフィールドに開始時刻と終了時刻を格納してから、「セッション時間」を集計し、文字列として格納するように変換します。それらを文字列として表示したかったのです。 DateTimeとTimestampの違いは何ですか? – hnewbie

+1

タイムスタンプは、1970年(現在は1510524424)から経過した秒数です。日付時刻は日付と時刻です。しかし、datetimeを減算する関数があります。 https://stackoverflow.com/questions/10907750/calculate-difference- between-two-datetimes-in-mysqlを参照してください。 'varchar'と数学は巨大な痛みになるでしょう、その道を行くことはありません。 – chris85

答えて

0

TIMESTAMPDIFF()を使用して2つの日時の値の間の秒数を計算して合計することができます。例えば

SELECT SUM(TIMESTAMPDIFF(SECOND,CLOCK_IN,CLOCK_OUT)) AS TOTAL_SECS 
FROM timeclock 
WHERE USERNAME = '$sessuser' AND CLOCK_OUT BETWEEN '$dbpast' AND '$dbnow' 

を参照してください:?https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff

あなたは現在どのようにユーザーが費やす時間の量を格納しているあなたのそれらの「ファンキー」値

+0

私は実際にクエリでtimediff()を使用していませんでしたが、結果的に文字列をハックしようとしていましたが、残念ながらそのウサギの穴を移動するのは間違いでした。初心者としては、私がやることはすべて学習体験です。 あなたの答えは、私のPHPファイルに多くのスペースを保存しました。ありがとうございました!私はこの答えを使って秒を時間形式に変えることができました:https://stackoverflow.com/questions/3856293/how-to-convert-seconds-to-time-format – hnewbie

+0

チャンスがあれば文字列操作を避けてください代わりに数字を使用する:)それは**数字**世界です。メモ、日付と時刻は数値です - 0〜9よりもちょっと複雑です –

0

私はこのようにそれを行うだろう:

をサイト上で各セッションの時間を節約するために、データベース内の列を作成します。私はおそらくタイムスタンプの列ではなく整数として設定します。私は数字を返すだけです。私は訪問の時間を記録するために別のタイムスタンプ列を持っていました。

クライアント側では、window.onloadにバインドするwindow.onloadをバインドします。これはlocalstorageに保存され、ページがロードされると現在のタイムスタンプに設定されます。ユーザーに合計サイト時間を表示するにはmoment.jsライブラリを使用し、リアルタイムで。クッキーが既に存在するかどうか確認し、新しいクッキーを設定する前に処理してください。

別の機能をwindow.onunloadにバインドして、ユーザーがサイトから移動したときに別のCookieをタイムスタンプで保存するか、setIntervalを使用してサイトにある間に毎分最新のタイムスタンプを保存します。

cookie/localstorageに値があるかどうかを確認し、ページの読み込みのタイムスタンプからページの読み込み時間を差し引いて、ページのアンロード時の秒数を取得します。それをデータベースに保存し、unloadイベントのタイムスタンプを使用して訪問のタイムスタンプを設定します。

データベースで関連するクエリを実行して、最終日/週/月のサイトの合計秒数を返し、それをajax経由でmoment.jsに渡します。約2行のコードを使用して秒単位で値を含む文字列から記述するようなカウンタを表示できます。

+0

0_0これは滑らかです。好き。私はクッキーについてあまりよく知っていませんが、今後はクッキーを組み込む必要があります。 – hnewbie

関連する問題