Steve TENZA
Intervient pour votre site internet
Facebook Me contacter Cookie
Télécharger
Noter:
4/5 (2)
Ajouté/Modifié le 2023-11-02
Visionné 4895 fois

Calcul de la différence entre deux dates en PHP

Description

Ce script PHP vous permet de déterminer le nombre de jours qui séparent deux dates, il est utile pour calculer la différence entre deux événements ou pour établir des délais.

Ce script tire parti de la fonction PHP date_diff(), qui fournit des informations détaillées sur la différence entre deux dates. Cela facilite le calcul de la durée entre les dates en PHP.

Veuillez noter qu'il est nécessaire de configurer le fuseau horaire pour afficher la différence correcte, jusqu'à la minute.

Le fuseau horaire pour la France peut être configuré comme suit :
PHP

date_default_timezone_set("Europe/Paris");


Prenons des dates et vérifions leur différence d'intervalle.

/*
* A noter qu'il vous faudra configurer le timezone pour afficher la bonne différence, à la minute prés
* Le timezone pour la France:
* date_default_timezone_set("europe/paris");
* A utiliser en haut du document
*/
function differenceDate($UneDate,$UneAutre=false){
//on part du principe que $UneDate et $UneAutre peut être envoyé sous deux formats: un timestamp ou une date formatée

//on vérifie donc le format envoyé, pour le mettre en date formatée si c'est un timestamp:
//is_numeric vérifie si c'est un nombre entier (un timestamp est un nombre entier)
$UneDate = is_numeric($UneDate)?date("d-m-Y H:i:s",$UneDate):$UneDate;

//on crée ensuite la date via date_create (Retourne un nouvel objet DateTime (DateTime: Représentation d'une date et heure))
$UneDate = date_create($UneDate);
$maintenant = date_create($UneAutre==false?'now':(is_numeric($UneAutre)?date("d-m-Y H:i:s",$UneAutre):$UneAutre));

//si jamais la date formatée qui à été envoyée est incorrect, on retourne un message d'erreur
if(!$UneDate){
echo "La date envoyée à differenceDate() est incorrecte.";
return;
}
//date_diff nous donne maintenant des valeurs sur les représentations ci-dessus
$interval = date_diff($maintenant, $UneDate);

//on récupère les valeurs d'$interval qui nous intéresse
$y=$interval->y;//années
$m=$interval->m;//mois
$d=$interval->d;//jours
$h=$interval->h;//heures
$i=$interval->i;//minutes
$s=$interval->s;//secondes
$invert=$interval->invert;//0 = $UneDate est dans le futur, 1 = $UneDate est dans la passé
$texte_invert=$invert==($UneAutre==false?1:0)?'Il y a':'Dans';//il y a une différence lorsqu'on demande un interval ou si on demande "depuis $UneDate seulement":
//depuis $UneDate seulement: 1 = $UneDate est dans le futur, 0 = $UneDate est dans la passé
//interval entre $UneDate et $UneAutre: 0 = $UneDate est dans le futur, 1 = $UneDate est dans la passé
$days=$interval->days;//nombre de jours écoulés (depuis combien ou dans combien, nombre entier positif)

//enfin, on retourne les différences pour les afficher:

//si il y a plus d'un an, on affiche le nombre d'année plus le nombre de jours ("5 ans et 18 jours" par exemple)
if($y>0) $texte="$texte_invert $y an".($y>1?'s':'').($d>0?" et ".$d." jour".($d>1?'s':''):'');
//si il y a moins d'un an, on affiche les mois et les jours ("5 mois et 24 jours" par exemple)
elseif($m>0) $texte="$texte_invert $m mois".($d>0?" et $d jour".($d>1?'s':'') : "");
//si il y a moins d'un mois, on affiche les jours, évidemment
elseif($d>0) $texte="$texte_invert $d jour".($d>1?'s':'');
//les heures si il y a moins d'un jour
elseif($h>0) $texte="$texte_invert $h heure".($h>1?'s':'');
//les minutes si il y a moins d'une heure
elseif($i>0) $texte="$texte_invert $i minute".($i>1?'s':'');
// et les secondes si il y a moins d'une minute
elseif($s>0) $texte="$texte_invert $s seconde".($s>1?'s':'');

//si toutes les précédentes valeurs précédentes sont à 0, c'est forcément que c'est maintenant/aujourd'hui (s'affiche seulement si les heures et minutes ne sont pas précisées)
else $texte="C'est aujourd'hui!";

//on retourne un tableau, au moins on pourra afficher la ou les valeurs voulues
return [
'texte'=>$texte,//notre texte formaté du genre "Il y a 5 heures" ou "Dans 1 mois et 12 jours", par exemple
'y'=>$y,
'm'=>$m,
'd'=>$d,
'h'=>$h,
'i'=>$i,
's'=>$s,
'invert'=>$invert,
'texte_invert'=>$texte_invert,
'days'=>$days,
];
}
//utilisation pour afficher la date indiquée jusqu'à maintenant:
$differenceDate = differenceDate("8-5-2120 10:00");
//on peut afficher n'importe quelle valeurs:
//on affiche le texte:
echo "<p>{$differenceDate['texte']}</p>";
//l'utilisation d'accolade dans un echo est possible grâce aux guillemets doubles, pas possible avec les simples guillemets, vous devez utiliser la concaténation suivante: '.$differenceDate['texte'].'
//on affiche le nombre de jours écoulé (ou le nombre de jours qu'il reste à passer):
//utilisation pour un compte à rebours:
if($differenceDate['invert']==0)
echo "<p>Disponible dans {$differenceDate['y']} an(s), {$differenceDate['m']} mois, {$differenceDate['d']} jour(s), {$differenceDate['h']} heure(s), {$differenceDate['i']} minute(s), {$differenceDate['s']} seconde(s)</p>";
else
echo "<p>La date est passé depuis {$differenceDate['days']} jour(s)!</p>";
//l'utilisation de if/else sans accolade est possible si vous mettez qu'une seule chose après if ou else, ici on a une chose (echo)
$differenceDate = differenceDate("1-4-2020 10:00","1-4-2120 10:00");
echo "<p>{$differenceDate['texte']}</p>";

$differenceDate = differenceDate(1588778845,1789889845);
echo "<p>{$differenceDate['texte']}</p>";

$differenceDate = differenceDate("1-4-2120 10:00",1789889845);
echo "<p>{$differenceDate['texte']}</p>";

$differenceDate = differenceDate(1588778845,"1-4-2120 10:00");
echo "<p>{$differenceDate['texte']}</p>";
A noter qu'on peut également s'en servir en compte à rebours PHP, si la date est dans le futur. (sera statique mais couplé à du JS on peut faire bouger la date une fois la page chargée)
Pour information, date_diff() retourne:


Pour l'intervalle du 1er mars 2010 au 1er avril 2020:

object(DateInterval)[3]
public 'y' => int 10
public 'm' => int 1
public 'd' => int 0
public 'h' => int 15
public 'i' => int 4
public 's' => int 52
public 'weekday' => int 0
public 'weekday_behavior' => int 0
public 'first_last_day_of' => int 0
public 'invert' => int 1
public 'days' => int 3684
public 'special_type' => int 0
public 'special_amount' => int 0
public 'have_weekday_relative' => int 0
public 'have_special_relative' => int 0


J'espère que ce script gratuit vous est utile.
Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Votre réussite en ligne commence ici

Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.

Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.

Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :

Demander un devis
Réponse rapide !

Vous recherchez un script précis ?

Dites-moi ce dont vous avez besoin, je peux développer le script demandé et vous envoyer un mail dès qu'il est dispo !

🔔 Vous pouvez laisser votre mail pour recevoir les nouveaux scripts. Pas de pub, pas de tracas. Vous êtes libre de le supprimer à tout moment.

Je prends en compte toutes les demandes. Les idées les plus populaires passent en priorité et seront publiées dès qu'elles seront prêtes. 2856 demandes reçues.

Si vous avez un projet en tête, je vous suggère de me contacter directement pour en discuter.

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha
memo2
Commenter

lordbdp le 10 Mai 2020 à 00:59

Aurais-tu le code afin d'afficher l'âge d'un membre à partir de sa date de naissance (sur sgdb) ?
Merci pour tes codes ;)

admin le 10 Mai 2020 à 10:45

Bonjour,

non désolé, peut être voir la fonction EXTRACT() pour récupérer l'année et faire une simple soustraction avec l'année courante ?

admin le 10 Mai 2020 à 11:01

Voir la fonction AGE() (PostgreSQL)

Il y a un sujet ici: Calcul de l'age d'une personne - Développement SQL Server

Retour à la liste des scripts

Un site à créer ?
Contactez-moi