Conversion chaine de caractères en date fr avec substr [Résolu]

Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Dernière intervention
28 mars 2010
- - Dernière réponse : bruno3591
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Dernière intervention
28 mars 2010
- 29 oct. 2008 à 16:09
Bonjour,

Je suis débutant en php. Pouvez-vous me dire si la solution que j'ai trouvé pour convertir ma chaine en date est bonne, trop longue ou autre... ? A l'exécution ça fonctionne chez moi. Merci.

$date = $_POST['chaine'];

    $jour = substr($date, 0, 2);
    $mois = substr($date, 2, 2);
    $annee = substr($date, 4, 7);

    $result = $jour . '/' . $mois . '/' . $annee;
echo $result;
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
206
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 octobre 2011
3
Merci
Bonjour, tout depend dans quel format est la date de depart, et dans quel format tu veux la transformer.
Dans une BD, le format DATE est de la forme AAAA-MM-JJ ...

Apparemment, ta chaine de depart est toujours de la forme 'JJMMAAAA' ?
Et tu veux qu'elle soit en JJ/MM/AAAA ?
Dans ce cas, a priori, c'est bon.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 91 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jreaux62
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Dernière intervention
30 juillet 2012
33
0
Merci
salut
ca me semble correct (en testant, t'aurais pu en etre sur...)

sur phpcs, t'as des tonnes de scripts pour les dates sinon.
Commenter la réponse de coucou747
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Dernière intervention
28 mars 2010
26
0
Merci
Apparemment, ta chaine de depart est toujours de la forme 'JJMMAAAA' ?
Et tu veux qu'elle soit en JJ/MM/AAAA ?

Oui je pars d'une date type 23102008, donc à l'exécution du script je passe bien en 23/10/2008 pour ensuite passer par un STR_TO_DATE dans une requête d'insertion.

Historique :

Au départ je voulais comparer 2 dates. Problème, mes dates sont saisies en chaine de la forme 23/10/2008.
Pour les comparer je devais enlever les "/", pour cela j'utilise : echo implode('', (explode('/', $date1)));
Je compare mes 2 chaines jjmmaaaa > jjmmaaaa
Je convertis de nouveau en jj/mm/aaaa et j'insert dans un champ date  de ma table, avec str_to_date qui me convertit la date au format aaaa/mm/jj avant d'insérer.

Est-il plus courant d'utiliser explode à la place de substr ?

Je ne sais pas si je me complique la vie, mais pour le moment j'ai pas trouvé plus court.
Commenter la réponse de bruno3591
Messages postés
206
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 octobre 2011
0
Merci
Si c'est uniquement pour inserer dans la base de donnees au format DATE,
il est plus simple de transformer ta chaine JJMMAAAA directement au format DATE de la BD, c-a-d AAAA-MM-JJ (verifie dans la BD !)
<?php

$date = $_POST['chaine'];
    // decomposition de la date recue (jjmmaaaa)
    $jj = substr($date, 0, 2);
    $mm = substr($date, 2, 2);
    $aaaa = substr($date, 4, 7);
    // date au format DATE (aaaa-mm-jj)
    $dateBD = $aaaa.'-'.$mm.'-'.$jj;
echo $dateBD;
// et on l enregistre tel quel dans la BD
?>
Commenter la réponse de jreaux62
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Dernière intervention
28 mars 2010
26
0
Merci
Je dois comparer les dates avant d'insérer. :)
Commenter la réponse de bruno3591
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Dernière intervention
28 mars 2010
26
0
Merci
Suite à cette comparaison, j'ai mis en place mon script définitif, le problème c'est que maintenant la date ne s'enregistre plus dans ma base, je n'ai que des 0000-00-00.

vous avez une idée ?

if (isset($_POST['enregistrer']))
{

$id = $_POST['id'];
$nom = $_POST['liste1'];
$nature = $_POST['nature'];
$nbjour = $_POST['nbjour'];
$date1 = $_POST['dateDebut'];
$date2 = $_POST['dateFin'];

//Conversion de la chaine de caractères jj/mm/aaaa en jjmmaaaa :
$date_test1 = implode('', (explode('/', $date1)));
$date_test2 = implode('', (explode('/', $date2)));

//On compare les dates
if ($date_test1 >= $date_test2) {

//Si la condition est vérifiée on convertit au format jj/mm/aaaa
    $jour = substr($date_test1, 0, 2);
    $mois = substr($date_test1, 2, 2);
    $annee = substr($date_test1, 4, 7);

    $date_Debut = $jour . '/' . $mois . '/' . $annee;
   
    $jour = substr($date_test2, 0, 2);
    $mois = substr($date_test2, 2, 2);
    $annee = substr($date_test2, 4, 7);

    $date_Fin = $jour . '/' . $mois . '/' . $annee;
}   
//On insére les données comparés   
$req = mysql_query("INSERT INTO absence (id, nom, nature, nbjour, debut, fin) VALUES ('','$nom','$nature','$nbjour',STR_TO_DATE('$dateDebut', '%d/%m/%Y'),STR_TO_DATE('$dateFin', '%d/%m/%Y') )");

echo "<script>alert('Enregistrement effectué !')</script>";  
}

 else {
echo "<script>alert('L'enregistrement a échoué !')</script>";  
}
Commenter la réponse de bruno3591

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.