Conversion chaine de caractères en date fr avec substr

[Résolu]
Signaler
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
-
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
-
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;

6 réponses

Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
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.
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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.
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
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
?>
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

Je dois comparer les dates avant d'insérer. :)
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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>";  
}