Comment créer un select en PHP qui affiche en auto les 12 prochains mois

Voici à quoi le select ressemble :

Bonjour à tous,

Pour un projet récent j’ai eu besoin de créer un select qui affiche automatiquement le mois-année (ex : 02-2020) dans la partie “value” et le mois année (Février 2020) dans la partie visible, et ça devait le faire pour le mois en cours et les 11 mois suivants automatiquement.

Je ne pense pas que mon code soit optimal, mais ça devrait en dépanner plus d’un 😉

echo "<select name='Date' id='Date' class='form-control'>
	<option value=''>Date</option>";

	for ($i = 0; $i < 12; $i++) {

		// Récupération de la date du jour
		$date_en_cours = date('d-m-Y');

		// On lui ajoute 1 mois
		$date_en_cours = date('d-m-Y', strtotime("+$i month", strtotime($date_en_cours)));

		// On passe la langue des dates en FR
		setlocale(LC_TIME, 'fr_FR.utf8', 'fra');

		// On transforme la date au format d-m-y en format timestamp
		$date_timestamp = strtotime($date_en_cours);

		// On récupère le mois en cours
		$mois_en_cours = strftime("%B", $date_timestamp);

		// On explose la date au format d-m-y, ce qui donne un tableau avec 3 éléments [0] = jour, [1] = mois et [2] = année
		$annee_en_cours = explode('-', $date_en_cours);

		// On transforme la date au format timestamp en format m-Y
		$date_en_cours = date('m-Y', $date_timestamp);

		// En value on affiche mois-année (ex 03-2020) et en visible on affiche Mars 2020
		echo "<option value='$date_en_cours'>$mois_en_cours " . $annee_en_cours[2] . "</option>";

	}

echo "</select>";

Comme vous le voyez, j’utilise Bootstrap pour la mise en forme, si vous ne l’utilisez pas encore, vous devriez vous y intéresser, il y a vraiment des options très pratique dans cette librairie.

Concernant le code en lui même, je pense qu’il est largement assez commenté pour que j’ai besoin d’expliquer plus en détail ici comment fonctionne ce select et le code php qui est dedans.

Si vous connaissez des petits raccourcis où un meilleur code que celui là, n’hésitez pas à le partager dans les commentaires 😉

A++

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

49 − 43 =