FMCorz.info
Le blog d'un geek qui n'en est pas un !

Mot-clé - php

Fil des billets

mardi, juillet 13 2010

Ajouter un mois à une date en PHP

Ne criez pas trop vite qu'il s'agit d'une fonction simple ! La fonction strtotime est certainement très intéressante, mais elle ne fait pas tout !

Démonstration

Nous sommes le 15 janvier. J'utilise strtotime("+1 month"), je me retrouve donc au 15 février. Jusque là tout va bien. Mais si nous sommes le 31 janvier...

Dans ce cas, strtotime va renvoyer le 3 mars (selon l'année). Voici une fonction qui prendra en compte le dernier jour du mois suivant si le mois ne comporte pas assez de jours.

Fonction PHP pour incrémenter une date

function getNextDate($type = null, $now = null, $start = null) {

	if (is_null($now)) return false;

	if (!is_numeric($now)) $now = strtotime($now);
	if (!is_null($start) && !is_numeric($start)) $start = strtotime($start);
	
	switch($type) {
		
		/**
		 * Rajouter un mois à $now en tenant en compte que $start est le tout début
		 */
		case "month":
		case "monthly":
			
			if (!is_null($start)) {
				$day = date("j", $start);
			} else {
				$day = date("j", $now);
			}
				
			switch($day) {
				case 29:
				case 30:
				case 31:
					$next = strtotime("next month", mktime(0, 0, 0, date("m", $now), 1, date("Y", $now)));
					$lastDay = date("t", $next);
					$next = mktime(0, 0, 0, date("m", $next), $lastDay, date("Y", $next));
					break;
					
				default:
					$next = strtotime("+1 month", $now);
					break;
			}
				
			break;				
			
	}
	
}

Je n'ai pas encore écrit la suite de la fonction permettant d'obtenir une date futur selon un autre $type, mais ça devrait suffire.

Utilisation

$timestamp = getNextDate($type, $now, $start);

@param String $type Le type de calcul (uniquement month pour l'instant)
@param Int $now Le timestamp de la date à partir de laquelle on calcule la prochaine
@param Int $start La date de départ
@return Int Timestamp de la date retournée

$start est utile lorsque dans une boucle vous cherchez à obtenir plusieurs mois suivants.

Exemple, si vous commencez au 30 janvier. $now sera le 30 janvier, et $start sera null. La date retournée sera le 28 février. Pour la prochaine date vous indiquerez le 28 février comme étant $now, et $start le 30 janvier. Si vous omettez $start, la valeur retournée sera le 28 mars, sinon elle sera le 30 mars.

lundi, juin 21 2010

Créer des URLs raccourcies

Vous aussi vous voulez proposer votre système d'URLs raccourcies comme bit.ly ? C'est pas bien compliqué ! Voici un point de départ.

Réduire une chaine de caractères

Lire la suite »

dimanche, novembre 22 2009

Sauvegarder ses bases de données MySQL

Et oui... comme j'ai tout perdu, j'ai cherché une solution pratique et rapide pour sauvegarder mes données MySQL.

Nous allons utiliser :

  • mysqldump
  • phpMyAdmin
  • crontab
  • php5-cli

Backup MySQL

Lire la suite »