2017-01-08 6 views
6

出席システムを作成しようとしています。チェックアウトで Attendance System in PHPPHPの時差

私は、従業員Idで私の出席をフェッチし、従業員のプロファイルにこのようなビューをレンダリング

public function updateAttendance($data,$id) 
    { 
    date_default_timezone_set('Asia/Karachi'); 
    $attendance=array(
     'check_in'=> $data['check_in'], 
     'check_out'=> $data['check_out'] 
    ); 
    $this->db->WHERE('id',$id)->update('attendance',$attendance); 
    $this->db->query('UPDATE attendance SET hours=(HOUR(TIMEDIFF(check_out,check_in))-1) WHERE DATE(date)=\''.date('Y-m-d').'\' and employee_id='.$id); 
    return true; 
} 

(CodeIgniterのを使用)、データベース内の出席を更新関数を呼び出して時間を計算します。

Employee Attendance

問題は、私はおそらく私のクエリに、時間の間違った計算を取得しています。クエリによる修正があるのですか、または時間の差分を時間形式で保持してから、それらを月末にすべて追加してから時間を取得する必要がありますか?

+0

企業が合計時間からランチ時間を減算するため、クエリの "-1"(HOUR(TIMEDIFF(check_out、check_in)) - 1)が要件です。 –

+0

あなたは結果を表示中に時間差を計算しようとしましたが、mysqlテーブルに格納された 'hour'カラムのテーブルデータを取得するのではありませんか? –

+0

ああ、私はそれもやっていると思っていた。事は、毎日の時間を格納するために出席テーブルの列として時間があることです。しかし、HOUR機能のINTの性質は、私に毎日の従業員ごとに多くの分を無駄にするフロア値を与えるだけです。 –

答えて

4

tr yのこの1 ...

$to_time = strtotime("2008-12-13 10:42:00"); 
$from_time = strtotime("2008-12-13 10:21:00"); 
echo round(abs($to_time - $from_time)/60,2). " minute"; 
+0

60分(60 * 60)分で置き換えてください。 –

+0

意味があります。 、Thanks @Pravin –

+0

私はそれをここhttp://prntscr.com/dswi9x @ Pravinの結果を見てみました。私はラウンド関数を削除し、10進形式で値を保持する必要がありますね。 –

1

私はその優れたこの機能を使用すると思う:あなたがそれらに

を操作をすることができ1483571520

と日付にそれらを返すことができます:コードリターンのこのライン

$ MY_TIME = strtotime('2017-01-04 23:12'); 

この数字をこの関数を使用してデータベースに保存するフォーマット:

date('y-m-d H:i',$MY_TIME); 
+0

nima bro。私は、UNIXのタイムスタンプとstrtotime()関数をよく知っています。あなたは秒をデータベースに保存し、必要な時間を得るためにそれらを減算する必要があると言っていますか?それはまだ私に間違った答えを与えるでしょう。他の誰かがより良い解決策を持っています –

+0

なぜそれがあなたに間違った答えを与えるでしょうか? – Jhecht

+0

秒が必要だとは思わない – nima

1
$time = new DateTime($givenTime); 
$time->diff(new DateTime()); 

、それはより良いあなたを助けるかもしれない、このコードを試してみてください。