Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP Convertir la date en jours/heures/secondes vierges

Vous devez toujours enregistrer vos dates dans le format datetime de MySQL (AAAA-MM-JJ). Cela vous permet de profiter facilement de la fonctionnalité de date intégrée de MySQL. Le stocker dans n'importe quel autre format signifie (potentiellement beaucoup) plus de travail pour vous lorsque vous voulez en faire plus que simplement afficher ces valeurs.

Pour accomplir ce que vous voulez faire avec PHP, vous devez DateTime() (basé sur cette réponse ):

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
    $elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
    $elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
    $elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);

Ces lignes créent DateTime() objets avec leurs dates respectives.

$interval  = $datetime1->diff($datetime2);

Cette ligne soustrait la deuxième date de la première et renvoie la différence sous la forme d'un DateInterval() objet.

if ($interval->days > 7)

Cette ligne vérifie que sept jours ou plus se sont écoulés entre les deux dates. Si tel est le cas, le premier bloc de code est exécuté. Sinon, la première date est imprimée.

$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

Ce bloc de code prend juste la différence de date entre les deux dates (un DateInterval() objet) et le formate dans le format que vous avez demandé. La deuxième ligne supprime toutes les périodes de temps qui n'ont pas de valeurs (c'est-à-dire 0 mois) et les supprime de la chaîne. La troisième ligne prend toutes les périodes avec une valeur (c'est-à-dire 1 mois) et supprime le "s" inutile à la fin (c'est-à-dire que 1 mois devient 1 mois).