2015-12-31 3 views
0

Я использую codeigniter 3.0.3 для этого проекта.Как получить разницу между двумя временными метками?

Я пытаюсь получить разницу между двумя временными метками (часы и часы).

Вот функция пытается сделать так:

public function clock_user_out() 
{ 
    $this->db->where('USER_EMAIL', $this->session->userdata('USER_EMAIL')) 


    $data = $this->db->get('clocked_in_users'); 
    $uemail = $data->row()->USER_EMAIL; 

    $uclockin = $data->row()->USER_CLOCK_IN; 

    $uclockout = date(('Y-m-d H:i:s')); 

    $uhours = $uclockout-$uclockin; 

    $newdata['USER_EMAIL'] = $uemail; 

    $newdata['USER_CLOCK_IN'] = $uclockin; 


    $newdata['USER_CLOCK_OUT'] = $uclockout; 


    $newdata['USER_WORK_HOURS'] = $uhours; 

    $this->db->insert('user_hours',$newdata); 



    $this->db->where('USER_EMAIL', $this->session->userdata('USER_EMAIL'));  




    $this->db->delete('clocked_in_users'); 

} 

Я считаю, что ошибка, когда я получаю переменную $ uhours путем вычитания $ uclockin от $ uclockout.

В таблице, в которой я работаю, есть 5 столбцов.

  1. ID [INT]
  2. USER_EMAIL [VARCHAR]
  3. USER_CLOCK_IN [временная метка]
  4. USER_CLOCK_OUT [временная метка]
  5. USER_WORK_HOURS [время]

Теперь для того, я проверил это были результаты.

  • USER_CLOCK_IN = 2015-12-31 07:37:59
  • USER_CLOCK_OUT = 2015-12-31 07:38:07

но результат для USER_WORK_HOURS кончался будучи 00: 20:15. Это не имеет смысла для меня. Единственное, что было похоже на это, - это взять 2015 год и разбить его на формат TIME в базе данных?

Это то, что произошло? Использую ли я неправильный формат для этого столбца?

Каков правильный способ сделать это?

Заранее спасибо.

EDIT: Проблема решена благодаря Ashok Chitroda и Хорхе Торрес здесь есть поправки, я должен был сделать

$uhours = $uclockout-$uclockin; 

в

$uhours = date('H:i:s' , (strtotime(date('Y-m-d 00:00:00'))+ strtotime($uclockout) - strtotime($clockin))); 

, а также я полбы переменную неправильно.

Спасибо всем

+0

вы пробовали date_diff функцию? – JTheDev

+0

@JTheDev Я это видел, но не знал, как это использовать. Это просто функция PHP? – Ddrossi93

+0

@JTheDev на самом деле да, я попробовал это. Я включил $ uclockin и $ uclockout в качестве параметров, и он сказал мне, что у меня были неправильные параметры. может ли он не принимать переменные в качестве параметров? – Ddrossi93

ответ

3

Заменить

$uhours = $uclockout-$clockin; 

в

$uhours = date('H:i:s' , (strtotime(date('Y-m-d 00:00:00'))+ strtotime($uclockout) - strtotime($clockin))); 
+0

Пробовал это, и результаты не имеют для этого никакого смысла. Clock_in = 2015-12-31 08:15:24. Clockout = 2015-12-31 08:15:29. и разница составила 00:47:13. – Ddrossi93

+0

пользователь Хорхе Торрес поймал ошибку, переменная $ clockin должна быть $ uclockin, но в сочетании с вашим ответом это работает отлично. Большое вам спасибо – Ddrossi93

0

Используйте timestampdiff (АППАРАТ, ПЕРВЫЙ TIMESTAMP, ВТОРОЙ TIMESTAMP) в запросе. Follow this link

+0

- это то, что в базе данных используется SQL? или функция PHP? – Ddrossi93

+0

http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff SQL –

0

вы можете использовать как этот

$to_time = $clockin; 
$from_time =$uclockout; 
$a= round(abs($to_time - $from_time)/60); 

echo ($a/60).' Hours'; 

если ваш $ clockin не в метки времени мольбы преобразования даты в метку времени , как это например.

$to_time = strtotime("2008-12-13 09:42:00"); 
$from_time = strtotime("2008-12-13 11:42:00"); 
$a= round(abs($to_time - $from_time)/60); 

echo ($a/60).' Hours'; 
1

Возможно, вы используете неправильную переменную в вычитании?

$uclockin = $data->row()->USER_CLOCK_IN; 

$uclockout = date(('Y-m-d H:i:s')); 

$uhours = $uclockout-$clockin; 

Примечание $ uclockin Vs $ clockin

+0

Вы там верны. Хорошо поймал. Теперь разница между временем подходит как 00:00:00 – Ddrossi93

+0

Теперь объединитесь с ответом Ашоком Читродой :) –

+0

красивый. огромное спасибо – Ddrossi93

Смежные вопросы