J'utilise codeigniter 3.0.3 pour ce projet.

J'essaie d'obtenir la différence entre deux horodatages (horloge d'entrée et de sortie).

Voici la fonction qui tente de le faire:

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'); 

}

Je crois que l'erreur est quand j'obtiens la variable $ uhours en soustrayant $ uclockin de $ uclockout.

Il y a 5 colonnes dans le tableau avec lequel je travaille.

  1. ID [int]
  2. USER_EMAIL [varchar]
  3. USER_CLOCK_IN [horodatage]
  4. USER_CLOCK_OUT [horodatage]
  5. USER_WORK_HOURS [heure]

Maintenant, pour celui que j'ai testé, voici les résultats.

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

Mais le résultat pour USER_WORK_HOURS a fini par être 00:20:15. Ce qui n'a pas de sens pour moi. La seule chose qui semble avoir été prise a été de prendre l'année 2015 et de la diviser au format TIME dans la base de données?

C'est ce qui s'est passé? Est-ce que j'utilise le mauvais format pour cette colonne?

Quelle est la bonne façon de procéder?

Merci d'avance.

EDIT: Problème résolu grâce à Ashok Chitroda et Jorge Torres voici les corrections que j'ai dû faire

$uhours = $uclockout-$uclockin;

À

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

Et aussi j'ai mal orthographié une variable.

Merci tout le monde

0
ddrossi93 31 déc. 2015 à 09:52

4 réponses

Meilleure réponse

Remplacer

$uhours = $uclockout-$clockin;

À

$uhours = date('H:i:s' , (strtotime(date('Y-m-d 00:00:00'))+ strtotime($uclockout) - strtotime($clockin) ));
3
Ashok Chitroda 31 déc. 2015 à 07:13

Utilisez-vous la mauvaise variable dans la soustraction?

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

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

$uhours = $uclockout-$clockin;

Remarque $ uclockin Vs $ clockin

1
Jorge Torres 31 déc. 2015 à 07:17

Utilisez timestampdiff (UNIT, FIRST TIMESTAMP, SECOND TIMESTAMP) dans votre requête. Suivez ce lien

0
Ayi Muhammad Iqbal Nasuha 31 déc. 2015 à 07:09

Vous pouvez utiliser comme ça

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

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

Si votre $ clockin n'est pas dans l'horodatage, convertissez la date en horodatage comme ceci, par exemple.

$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';
0
shiva chauhan 31 déc. 2015 à 07:13