begin process at 2012 02 13 08:25:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > FONCTION QUI ESSAIE DE RETOURNER UNE DATE VALIDE COMME ELLE PEUT...

FONCTION QUI ESSAIE DE RETOURNER UNE DATE VALIDE COMME ELLE PEUT...


 Information sur la source

 Description

Ce script permet de vérifier et de retourner un une date entrée manuellement par l'utilisateur.
J'attends vos commentaires et suggestions pour améliorer le script.

Source

  • function dateValidReturnTry($date) // Valid is : dd/mm/yyyy
  • {
  • function _arraySortByKeys(&$a) // Ré-index toutes les clés d'un tableau sans effectué de tri
  • {
  • $i = 0;
  • foreach($a as $k => $v)
  • {
  • $a[$i] = $v;
  • $i++;
  • }
  • }
  • // Pré formatage
  • $date = trim($date);
  • $date = str_replace('-', '/', $date);
  • $date = str_replace(' ', '/', $date);
  • $date = str_replace('.', '', $date);
  • if (strlen($date) == 8 && is_numeric($date)) // Si c'est une date sans séparateur
  • {
  • $date = substr($date, 0, 2) . '/' . substr($date, 2, 2) . '/' . substr($date, 4, 4); // On les ajoute
  • }
  • if (!ereg('/', $date)) // Si, même après le pré formatage, il est impossible de trouver de séparateur
  • {
  • return false;
  • }
  • $d = explode('/', $date); // Separation des différents éléments de la date
  • if (count($d) != 3 || !is_numeric($d[0]) || !is_numeric($d[1]) || !is_numeric($d[2]))
  • { // Si le tableau ne contient pas trois éléments ou si ceux-ci ne sont pas des nombres
  • return false;
  • }
  • $s = array();
  • // On stock chaque taille de chaque élément dans un tableau en y assignant la même clé
  • $s[0] = strlen($d[0]);
  • $s[1] = strlen($d[1]);
  • $s[2] = strlen($d[2]);
  • if ($s[0] + $s[1] + $s[2] != 8 || $s[0] > 4 || $s[1] > 4 || $s[2] > 4 || $s[0] == 3 || $s[1] == 3 || $s[2] == 3 || $s[0] < 2 || $s[1] < 2 || $s[2] < 2)
  • { // Si la somme des éléments et différente de 8 ou si un des éléments est supérieur à 4 ou égale à 3 ou inférieur à 2
  • return false;
  • }
  • foreach ($s as $k => $v)
  • {
  • if ($v == 4) // Si la valeur de l'élément en cours est égale à 4
  • {
  • $year = $d[$k]; // On cherche son homologue dans le tableau des éléments de la date et on le désigne comme étant l'année
  • unset($d[$k]); // On supprime cet élément du tableau des éléments de la date
  • break; // On stock la boucle car nous avons trouvé notre année !
  • }
  • }
  • _arraySortByKeys($d); // On ré-organise la tableau car l'élément que l'on vient de supprimer peut être n'importe lequel
  • if ($d[1] >= 1 && $d[1] <= 12 && $d[0] > 12)
  • { // Si le second élément (des éléments restants) est > 1 et < 12 et que le premier élément est lui > 12
  • $month = $d[1]; // C'est forcement cet index du tableau qui est le mois
  • unset($d[1]);
  • }
  • else
  • {
  • $month = $d[0]; // Sinon, on considère que le premier élément est le mois
  • unset($d[0]);
  • }
  • _arraySortByKeys($d); // Même chose, on ré-organise
  • if (!isset($month) || !isset($year) || !checkdate($month, $d[0], $year))
  • { // Si le mois ou l'année n'a pas été trouvé ou que la date est temporellement invalide (même si sa syntaxe est bonne)
  • return false;
  • }
  • return $d[0] . '/' . $month . '/' . $year;
  • }
function dateValidReturnTry($date) // Valid is : dd/mm/yyyy
{
	function _arraySortByKeys(&$a) // Ré-index toutes les clés d'un tableau sans effectué de tri
	{
		$i = 0;
		foreach($a as $k => $v)
		{
			$a[$i] = $v;
			$i++;
		}
	}
	
	// Pré formatage
	$date = trim($date);
	$date = str_replace('-', '/', $date);
	$date = str_replace(' ', '/', $date);
	$date = str_replace('.', '', $date);
	
	if (strlen($date) == 8 && is_numeric($date)) // Si c'est une date sans séparateur
	{
		$date = substr($date, 0, 2) . '/' . substr($date, 2, 2) . '/' . substr($date, 4, 4); // On les ajoute
	}

	if (!ereg('/', $date)) // Si, même après le pré formatage, il est impossible de trouver de séparateur
	{
		return false;
	}

	$d = explode('/', $date); // Separation des différents éléments de la date
	
	if (count($d) != 3 || !is_numeric($d[0]) || !is_numeric($d[1]) || !is_numeric($d[2]))
	{ // Si le tableau ne contient pas trois éléments ou si ceux-ci ne sont pas des nombres
		return false;
	}
	
	$s = array();
	
	// On stock chaque taille de chaque élément dans un tableau en y assignant la même clé
	$s[0] = strlen($d[0]);
	$s[1] = strlen($d[1]);
	$s[2] = strlen($d[2]);
	
	if ($s[0] + $s[1] + $s[2] != 8 || $s[0] > 4 || $s[1] > 4 || $s[2] > 4 || $s[0] == 3 || $s[1] == 3 || $s[2] == 3 || $s[0] < 2 || $s[1] < 2 || $s[2] < 2)
	{ // Si la somme des éléments et différente de 8 ou si un des éléments est supérieur à 4 ou égale à 3 ou inférieur à 2
		return false;
	}

	foreach ($s as $k => $v)
	{
		if ($v == 4) // Si la valeur de l'élément en cours est égale à 4
		{
			$year = $d[$k]; // On cherche son homologue dans le tableau des éléments de la date et on le désigne comme étant l'année
			unset($d[$k]); // On supprime cet élément du tableau des éléments de la date
			break; // On stock la boucle car nous avons trouvé notre année !
		}
	}
	
	_arraySortByKeys($d); // On ré-organise la tableau car l'élément que l'on vient de supprimer peut être n'importe lequel
	
	if ($d[1] >= 1 && $d[1] <= 12 && $d[0] > 12)
	{ // Si le second élément (des éléments restants) est > 1 et < 12 et que le premier élément est lui > 12
		$month = $d[1]; // C'est forcement cet index du tableau qui est le mois
		unset($d[1]);
	}
	else
	{
		$month = $d[0]; // Sinon, on considère que le premier élément est le mois
		unset($d[0]);
	}
	
	_arraySortByKeys($d); // Même chose, on ré-organise
	
	if (!isset($month) || !isset($year) || !checkdate($month, $d[0], $year))
	{ // Si le mois ou l'année n'a pas été trouvé ou que la date est temporellement invalide (même si sa syntaxe est bonne)
		return false;
	}

	return $d[0] . '/' . $month . '/' . $year;
}

 Conclusion

J'attends vos avis.


 Sources du même auteur

CLASSE : COMPTEUR DE VISITEURS CONNECTÉS AU SITE
RENVOI UN DOSSIER DE NOM UNIQUE ET ALÉATOIRE
RACCOURCIR UNE CHAINE AVEC UN SÉPARATEUR AU MILIEU
MOTS TROP LONGS

 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

Source avec Zip VÉRIFICATION DE FORMULAIRE EN PHP par psonic13
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER SIMPLE par manuche
Source avec Zip Source avec une capture PHPJSVFORM : DES CLASSES PHP, DES JAVASCRIPTS POUR CRÉER FAC... par synanceia
Source avec Zip VOTRE SIGNE ASTROLOGIQUE par zulrigh

Commentaires et avis

Commentaire de elinep le 22/09/2005 21:06:25

Je pige pas trop ce que fait ton code...
Ya un truc qiu me parait byzarre dans ton if avec tes 12 millions de conditions : un nombre entier est forcemment > 4, =3 ou <2 non? donc ta condition est forcement vrai et ta fonction retourne systematiquement false ?

Commentaire de malalam le 23/09/2005 13:47:05 administrateur CS

Hello,

ta fonction est marrante.
Néanmoins, un reproche : si la date passée est valide, ta fonction ne renvoie que false, à priori. Tu devrais renvoyer la date.
Ensuite, un truc qui...bon...est un choix : elle inverse systématiquement, si c'est possible, jour et mois. S on met
1998/05/06 on obtient 06/05/1998.
Idem pour ça : echo dateValidReturnTry ('05/1998/06');
Et ça : echo dateValidReturnTry ('05199806');
retourne un truc bizarre ;-): 19/05/9806 . Je doute que ta fonction soit encore utilisée en 9806...tu peux mettre une borne, je pense.

Enfin je trouve ton code peu clair : surtout au niveau des variables.
Je ne vois pas l'intérêt de déclarer une fonction DANS une autre fonction.
Ceci :
$date = str_replace('-', '/', $date);
    $date = str_replace(' ', '/', $date);
peut-être raccourci, éventuellement.

J'ai plus le temps de continuer, lol. Bref, je trouve ta fonction sympa:-)


 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Tri de fichiers par date [ par Clem ] Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :&lt;?$rep=opendir('.');while ($file = r Comparer des dates [ par Blondy ] Je voudrais comparer des dates pour savoir quel fichier est le plus vieux... Mais lorsque je crée une date avec date("dmy"); par exemple, ça me crée q Comparaison de date [ par benett ] J'essaie de créer un site CDThèque et j'ai un gros problème : J'explique :Comment puis-je faire à partir de deux dates (La date de visite du site et l prob. pour des date ex. [ par LeRoux ] Je souhaite afficher les 5 articles les + récents d'une base de données se nommant articles, comment faire? Comparaison de date [ par benett ] Bonjour à tous,Comment peut-on comparer 2 dates et extraire la différences en jours.Ces 2 dates sont encodées via un formulaire au format aaaa/aa/aa.C formater une date [ par Stephane ] salutj'ai un gros pb que j'arrive pas a resoudre.j'ai une date dans une variable du type "2002/05/08", je voudrai arriver par quelque moyen que ce soi Convertir une Date au format Timestamp [ par Touf ] Salut !J'ai un petit pb : j'accède à une Date stockée dans une bdd mysql sous la forme (timestamp) "YmdHis" : 20020608105031J'aimerais l'afficher sous Date probleme [ par g0belin ] Ben voila en fait je veux faire un agenda...je veux afficher seulement les entree dans la base pour le jour courant...MAIS sa marche PASsa m'affiche t RE probleme DATE [ par g0belin ] Se que je veux faire c'est afficher les enregistrement qui ont la date du jours courant...Mais je n'y arrive pasPour cela j'ai un champs date(type:dat Date probleme [ par g0belin ] comment faire pour incrementer une date de x jours???je voulais faire dans le style mais sa marche pas!!!date("d-m-Y")+1;


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,914 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales