Bonour a tous et a toutes, j'espère que tout le monde va bien, voilà j'ai un petit soucis avec les calculs de date avec php. Voici mon problème: je veux afficher un message 'ok' qui dépend d'une conditions qui est la suivante: si la date de ma variable dernier_traitement est supérieur a la date de l'instant T moins une minute, on affiche le méssage sauf que je ne sais pas comment faire 'date à l'instant T moins une minute'
Merci beaucoup d'avance pour vos eventuelles solutions

$dernier_traitement=$tab['date_dernier_traitement'];
        $status_cr=$tab['status_cr'];   

        if($status_cr==1 && $dernier_traitement> DATE_SUB (date('y/m/d H:i:s'),'1 MINUTE')){

        echo 'ok';}

Ce que je veux

vérifier qu'il ne s'est pas écoulé plus d'une minute entre l'instant T et la date du dernier traitement.
$dernier_traitement est au format date('y/m/d H:i:s')

Ce que j'obtiens

Décrivez vos éventuelles erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

5 réponses


Quelque chose comme ça devrait faire ce que tu veux si tes dates sont bien en DateTime :

$dateInterval = $dernier_traitement->diff(new DateTime());

if ($dateInterval->i > 1) {
// Il y a plus d'une minute d'écart
}

Sinon, pour passer d'une string à un DateTime :

$dernierTraitementDT = DateTime::createFromFormat('y/m/d H:i:s', $dernier_traitement);

$dateInterval = $dernierTraitementDT->diff(new DateTime());

if ($dateInterval->i > 1) {
// Il y a plus d'une minute d'écart
}

Bonjour Karelo et merci pour ta réponse, j'ai testé le code mais j'ai cette erreur qui s'affiche: Fatal error: Uncaught Error: Call to a member function diff() on string

Fait bien attention diff s'utilise sur un objet date, donc tu dois convertir ta chaine en Date (ce que karelo montre sur sa première ligne)

j'avoue que je suis un peu perdu là, actuellement je regarde des tutos sur youtube relatif aux date , mais ils parlent de timestamp, de formatage mais pas vraiment de ce que je recherche

merci grafikart et kareylo, j'ai pu trouver une solution au problème grace a vous