Si j'ai une chaîne PHP au format AAAA-JJ-MM et un horodatage dans MySQL, existe-t-il un bon moyen de convertir entre eux ?

StackOverflow https://stackoverflow.com/questions/20598

Question

Je souhaite faire des comparaisons entre la chaîne de date et l'horodatage MySQL.Cependant, je ne vois pas une conversion facile.Est-ce que j'oublie quelque chose d'évident ?

Était-ce utile?

La solution

Conversion de l'horodatage au format :

date('Y-m-d', $timestamp);

Conversion du formaté en horodatage :

mktime(0, 0, 0, $month, $day, $year, $is_dst);

Voir date et mktime pour plus de documentation.

En ce qui concerne le stockage, c'est à vous de décider si vous souhaitez utiliser le format MySQL DATE pour stocker comme date formatée ;sous forme d'entier à stocker sous forme d'horodatage UNIX ;ou vous pouvez utiliser le format TIMESTAMP de MySQL qui convertit un horodatage numérique en un format lisible. Vérifiez la documentation MySQL pour les informations TIMESTAMP.

Autres conseils

Vous pouvez éviter d'avoir à utiliser strtotime() ou getdate() dans PHP en utilisant MySQL UNIX_TIMESTAMP() fonction.

SELECT UNIX_TIMESTAMP(timestamp) FROM sometable

Les données résultantes seront un horodatage Unix entier standard, vous pouvez donc faire une comparaison directe avec time().

J'ai écrit cette petite fonction pour simplifier le processus :

/**
 * Convert MySQL datetime to PHP time
 */
function convert_datetime($datetime) {
  //example: 2008-02-07 12:19:32
  $values = split(" ", $datetime);

  $dates = split("-", $values[0]);
  $times = split(":", $values[1]);

  $newdate = mktime($times[0], $times[1], $times[2], $dates[1], $dates[2], $dates[0]);

  return $newdate;
}

J'espère que ça aide

strtotime() et avoir un rendez-vous() sont deux fonctions qui peuvent être utilisées pour obtenir des dates à partir de chaînes et d'horodatages.Il n'existe cependant pas de fonction de bibliothèque standard qui convertit entre les horodatages MySQL et PHP.

Utilisez le PHP Date fonction.Vous devrez peut-être convertir l'horodatage mysql en horodatage Unix dans votre requête à l'aide du UNIX_TIMESTAMP fonction dans MySQL.

Une chaîne de date du formulaire :

YYYY-MM-DD

n’a aucun temps qui lui est associé.Un horodatage MySQL se présente sous la forme :

YYYY-MM-DD HH:mm:ss

pour comparer les deux, vous devrez soit ajouter une heure à la chaîne de date, comme minuit par exemple

$datetime = '2008-08-21'.' 00:00:00';

puis utilisez une fonction pour comparer l'heure époc entre eux

if (strtotime($datetime) > strtotime($timestamp)) {
    echo 'Datetime later';
} else {
    echo 'Timestamp equal or greater';
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top