Calculer la différence entre 2 dates en PHP
En PHP, il est assez facile de calculer la différence entre 2 dates et ainsi obtenir le nombre de jours, heures, minutes et seconde entre deux instants.
Pour ce faire, on va tout simplement utiliser le timestamp UNIX (qui exprime le temps en nombre de secondes écoulées depuis le 1 janvier 1970).
La première étape va donc être d'obtenir le timestamp des 2 dates à soustraire.
Obtenir le timestamp courant
Si l'une des 2 dates que vous voulez soustraire est la date courante, rien de plus simple pour obtenir le timestamp courant, grâce à la fonction time()
:
<?php echo time(); // 1352812633 ?>
Obtenir le timestamp d'une date précise
Maintenant si vous voulez obtenir le timestamp d'une date précise (par exemple celui de votre date de naissance), il y a 2 fonctions qui peuvent être utilisées : strtotime()
et mktime()
.
strtotime
C'est la fonction la plus simple à utiliser, il suffit de lui passer en paramètre une chaine contenant une date, mais pas dans n'importe quel format. La fonction est assez "intelligente" et reconnais un certain nombre de formats de date différents. Le plus facile est d'utiliser le format classique (qui est aussi utilisé par MySQL avec les champs DATETIME) : AAAA-MM-JJ HH:MM:SS
:
<?php $aLongTimeAgo = strtotime('1998-07-12 22:30:00'); $armageddon = strtotime('2001-09-11 09:30:00'); ?>
mktime
La fonction mktime est beaucoup moins pratique à utiliser, elle prend 6 paramètres !
mktime(hour, minute, second, month, day, year)
Différence entre 2 dates
Grâce au timestamp, on peut connaître le nombre de secondes entre 2 dates, à l'aide d'une simple soustraction :
Allez donc jeter un oeil sur cette page : fond dégradé sur excel.
<?php $now = time(); $date2 = strtotime('2012-08-14 16:01:05'); $diff = abs($date1 - $date2); ?>
La fonction abs
retourne la valeur absolue, ce qui permet d'éviter de se retrouver avec un nombre négatif si la seconde date est antérieure à la première.
Après il faut décomposer ce nombre de secondes en jour, heure, minute et seconde à l'aide de divisions et de modulo successif :
<?php $now = time(); $date2 = strtotime('2012-08-14 16:01:05'); function dateDiff($date1, $date2){ $diff = abs($date1 - $date2); // abs pour avoir la valeur absolute, ainsi éviter d'avoir une différence négative $retour = array(); $tmp = $diff; $retour['second'] = $tmp % 60; $tmp = floor( ($tmp - $retour['second']) /60 ); $retour['minute'] = $tmp % 60; $tmp = floor( ($tmp - $retour['minute'])/60 ); $retour['hour'] = $tmp % 24; $tmp = floor( ($tmp - $retour['hour']) /24 ); $retour['day'] = $tmp; return $retour; } // Test de la fonction print_r( dateDiff($now, $date2) ); ?>
Vous trouverez ici la même fonction en JavaScript : différence entre 2 dates.
Allez donc jeter un oeil sur cette page : toile d'araignée mouillée.
haha ! votre fonction de différence ne marchera pas !
mais comment je peux faire pour une date sous la forme " jj/mm/aaaa hh/mm/ss " ?
pour être plus précise , j'importe la date à partir d'un fichier .xls sous cette format et j'ai pas le droit de faire une modification
et merci
voici un bout de code que je viens de faire, il vous dépanner, mais il n'est peut être pas le meilleur :-)
<?php
// données excel intégré dans une variable
$maVariable="11/01/2017 15/51/55";
$DecoupeDate = explode(" ", $maVariable);
// donnera dans ce cas 1 array avec 2 valeurs --> $DecoupeDate[0] et $DecoupeDate[1]
// soit jj/mm/aaaa et hh/mm/ss
$DecoupeDate2a = explode("/", $DecoupeDate[0]);
$DecoupeDate2b = explode("/", $DecoupeDate[1]);
// idem que la première partie
// $DecoupeDate2a[0] et $DecoupeDate2a[1] et $DecoupeDate2a[2]
// $DecoupeDate2b[0] et $DecoupeDate2b[1] et $DecoupeDate2b[2]
/// $date2 = strtotime('2012-08-14 16:01:05');
$maVariablemodifiee=$DecoupeDate2a[2]."-".$DecoupeDate2a[1]."-".$DecoupeDate2a[0]." ".$DecoupeDate2b[0].":".$DecoupeDate2b[1].":".$DecoupeDate2b[2];
$date2 = strtotime($maVariablemodifiee);
echo $maVariablemodifiee."<br />"; // donnera la date sous la forme 2012-08-14 16:01:05
echo $date2;
//Il y a surement d'autres solutions plus rapides ^^
?>
Mes réponses sont tardives, mais elles peuvent tjs servir à d'autres ! :-)
Sa fonction est créée :
function dateDiff($date1, $date2){ ... }
$date1 est paramétrée virtuellement ainsi que $date2 afin d'être utilisées à l'intérieur de la fonction. Il aurait pu choisir $Jules, $Vernes dans function datediff($Jules, $Vernes)
Dans son exemple, là ou il va faire agir sa fonction :
print_r( dateDiff($now, $date2) );
les variables qu'il met dans dateDiff $nom et $date2 sont deux valeurs réelles. Le $now deviendra $date1 et $date2 sera $date2... il a repris le même nom, d'ou le fait que ça puisse être bizarre à la lecture du code.
:-)
merci
<?php
if(isset($_POST['etudiant'])){
$mil=$_POST['etudiant'];
$sit=$_POST['situation'];
$objet=$_POST['objet'];
$datdu=$_POST['date_du'];
$datau=$_POST['date_au'];
{
if ($_POST['etudiant'] != NULL AND $_POST['situation'] != NULL
AND $_POST['objet'] != NULL
AND $_POST['date_du'] != NULL
AND $_POST['date_au'] != NULL)
{
$requete = ("SELECT date_debut,date_fin FROM situation ");
$requete = mysqli_query($db, $sql);
if($datdu<=0 AND $datau>=0)
{
echo 'Impossible cet date existe deja dans la base de donnees';
}
else
{
$sql="INSERT INTO `situation`(`cd_etu`,`lib_sit`,`objet`,`date_debut`,`date_fin`) VALUES('$mil','$sit','$objet','$datdu','$datau')";
mysqli_query($db, $sql);
}
}}}
?>
merci
<?php
if(isset($_POST['etudiant'])){
$mil=$_POST['etudiant'];
$sit=$_POST['situation'];
$objet=$_POST['objet'];
$datdu=$_POST['date_du'];
$datau=$_POST['date_au'];
{
if ($_POST['etudiant'] != NULL AND $_POST['situation'] != NULL
AND $_POST['objet'] != NULL
AND $_POST['date_du'] != NULL
AND $_POST['date_au'] != NULL)
{
$requete = ("SELECT date_debut,date_fin FROM situation ");
$requete = mysqli_query($db, $sql);
if($datdu<=0 AND $datau>=0)
{
echo 'Impossible cet date existe deja dans la base de donnees';
}
else
{
$sql="INSERT INTO `situation`(`cd_etu`,`lib_sit`,`objet`,`date_debut`,`date_fin`) VALUES('$mil','$sit','$objet','$datdu','$datau')";
mysqli_query($db, $sql);
}
}}}
?>