Bonjour,

Je souhaite à l'aide d'une fonction créer dans mon AppController afficher par exemple le nombre de jours depuis l'inscription, jusque là tout va bien sauf que je souhaite compliquer un peu la fonction en lui envoyant en paramètre, l'élément auquel débuter l'execution

Exemple d'utilisations

    <?php 
    $this->afficher_date(AuthComponent::user('created'), time(), 'mois');
    ?>

Retournerais inscrit depuis x mois.

Ma fonction actuelle

** fonction vide étant donné que je n'ai pas mis le traitement pour l'instant.

<?php
public function afficher_date($time1, $time2, $start = null) {

        App::uses('CakeTime', 'Utility');
        $time1 = CakeTime::fromString($time1);
        $time2 = CakeTime::fromString($time2);
        //$this->Session->write('Auth.User.created', '2016-09-24 14:45:00');

        $secondes = floor(($time2 - $time1) / 1);
        $minutes = floor(($time2 - $time1) / 60);
        $heures = floor(($time2 - $time1) / 3600);
        $jours = floor(($time2 - $time1) / 86400);
        $mois = round(($time2 - $time1) / 2592000);
        $annees = floor(($time2 - $time1) / 31104000);

        /**
         * Si start = null on affiche tout
         * Sinon si start existe, on démare à l'élément cibler
         */
    }
    ?>

J'aimerais quelques chose qui m'évite de faire ce genre de code

if($start == "secondes") {
    // tout le traitement
} elseif($start == "minutes") {
    // tout sauf les secondes
} elseif($start == "jours") {
    // tout sauf les secondes,minutes,heures
}    

Une idée de comment je pourrais proceder ? 1 fonction par élément peut être ?

Merci !

3 réponses


Kareylo
Réponse acceptée

Utilise l'objet Chronos de CakePHP, pas sûr qu'il soit natif sur CakePHP2, par contre.

http://book.cakephp.org/3.0/fr/chronos.html#generer-des-differences

SparToo
Auteur

Merci pour le lien, apparament la fonction n'existe pas sous CakePHP 2, du coup je vais surement passer directement sur CakePHP 3

Tu peux tout simplement utiliser la bibliothèque sous CakePHP 2 aussi, utilise composer et charge l'autoload