Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2007, 14h45   #1
Invité de passage
 
Inscription : août 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 6
Points : 3
Points : 3
Par défaut Regex pour créer un timestamp avec mktime

Déjà mon deuxième post ici, faudrait pas qu'je m'habitue à trop me faire aider

Mon problème est simple (enfin non pas vraiment) : j'voudrais créer une regex pour analyser le contenu d'un champ de saisi et en faire sortir un timestamp avec mktime.

En plus clair :
- l'utilisateur voit un champ de saisi (input type text) et y rentre les infos
- il peut mettre une date : 18/10 ou 18/10/90 ou 18/10/1990
- il peut mettre une heure : 18h32 ou 18:32 ou 18h
- il peut mettre les deux : 18/10 18h ou 18/10/1990 18h32 ou etc ...
- après la regex se charge de récupérer les infos et la fonction php mktime transforme tout ça en un timestamp

Ce que j'ai fait :
Code :
1
2
3
4
5
6
7
8
9
10
11
$tps_min = $_GET['tps_min'];
$regex_tps = "#(([0-9]{1,2})/([0-9]{1,2})(/([0-9]{2,4}))?)?[ ]{0,3}(([0-9]{1,2})[h:]([0-9]{1,2})?)?#";
if (preg_match($regex_tps, $tps_min, $valeur_min))
{
$jour = $valeur_min[2];
$mois = $valeur_min[3];
$annee = $valeur_min[5];
$heure = $valeur_min[7];
$minute = $valeur_min[8];
$timestamp_min = mktime('$heure', '$minute', '', '$mois', '$jour', '$annee');
}
Or si je fais un echo $timestamp_min; il me sort "-1" quoi qu'il arrive ...
Sauf si je ne remplis pas le champ, auquel cas il m'affiche la valeur par défaut que j'ai paramétrée ...

Quelqu'un a une idée de mon erreur ?
Viper13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 18h20   #2
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Salut,

Ton erreur principale est que tu mets tes variables entre simple quotes.

J'ai amélioré un peu le tout.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$regex_tps = "#(?:([0-9]{1,2})/([0-9]{1,2})(?:/([0-9]{2,4}))?)? *(?:([0-9]{1,2})(?:h|:)([0-9]{1,2})?)?#"; 
 
if (preg_match($regex_tps, $tps_min, $valeur_min)) 
{
	if( !empty($valeur_min[1]) )
	{
		$jour = $valeur_min[1]; 
		$mois = $valeur_min[2];  
	}
	else
	    list($jour, $mois) = explode('/', date('d/m'));
	$annee = !empty($valeur_min[3]) ? $valeur_min[3] : date('Y');
	$heure = !empty($valeur_min[4]) ? $valeur_min[4] : date('h');
	$minute = !empty($valeur_min[5]) ? $valeur_min[5] : date('i');
 
	$timestamp_min = mktime($heure, $minute, 0, $mois, $jour, $annee);
}
J'ai mit les valeurs dates actuelles par défaut si elles ne sont pas renseignées, à toi de voir.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 19h36   #3
Invité de passage
 
Inscription : août 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 6
Points : 3
Points : 3
Pour les valeurs par défaut il me semble que mktime met automatiquement les valeurs actuelles lorsqu'il n'y en a pas, non ?

Pour le reste je testes et j'essaie de comprendre, merci pour ton aide

Edit : Après lecture attentive je penses avoir compris le code mais ça a l'air d'être légèrement abrégé J'connaissais pas cette façon de formuler ...

Edit 2 : Eh bah ça marche niquel ! Merci beaucoup à toi
Viper13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 20h58   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Citation:
Envoyé par Viper13
Pour les valeurs par défaut il me semble que mktime met automatiquement les valeurs actuelles lorsqu'il n'y en a pas, non ?
A vrai dire, j'en sais rien, je ne me sert jamais de cette fonction et du timestamp php
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h54.


 
 
 
 
Partenaires

Hébergement Web