public function diff($objcDateTime = null)
    {
        if ($this->time == null || $objcDateTime == null || $objcDateTime->time == null) {
            return false;
        }
        
        /*
         * On recopie l'objet
        */
        $d = clone $this;
        $objcDateTime_clone = clone $objcDateTime;
        
        // Test si on calcul les jours ouvr�s
        $flag_jours_ouvres = ($d->flag_jours_ouvres | $objcDateTime_clone->flag_jours_ouvres) ? true : false;
        
        $objdiff = (object)[];
        $objdiff->j = 0;
        $objdiff->jo = 0;
        $signe = 1; //Delai positif ou negatif
        
        //Si la date est la m�me
        $equal_date = $d->equals($objcDateTime_clone);
        if ($equal_date == 0) {
            $objdiff->j = 1;
            
            // Jour ouvr�
            if ($flag_jours_ouvres && $objcDateTime_clone->est_jours_ouvres()) {
                $objdiff->jo = 1;
            }
            
            return $objdiff;
        }
        
        /*
         * Inverse les dates si elles ne sont pas ordonn�es
         */
        $d_start = $d_end = null;
        if ($equal_date < 0) {
            $d_start = $d;
            $d_end = $objcDateTime_clone;
        }
        else {
            $signe = -1;
            $d_start = $objcDateTime_clone;
            $d_end = $d;
        }
        
        //On retire le flag jours ouvr�es pour que le add_days ne saute pas de jours
        $d_start->set_jours_ouvres(false);
        $d_end->set_jours_ouvres(false);
        
        while ($d_start->equals($d_end) <= 0) {
            $objdiff->j++;
            if ($flag_jours_ouvres && $d_start->est_jours_ouvres()) {
                $objdiff->jo++;
            }
            
            $d_start->add_days(1);
        }
        
        $objdiff->j *= $signe;
        $objdiff->jo *= $signe;
        
        return $objdiff;
    }