Conversion chaine de caractères en date fr avec substr

Résolu
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010 - 28 oct. 2008 à 11:36
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre 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;
A voir également:

6 réponses

jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
28 oct. 2008 à 11:53
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.
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 oct. 2008 à 12:04
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.
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
28 oct. 2008 à 12:52
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.
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
28 oct. 2008 à 15:35
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
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
28 oct. 2008 à 15:44
Je dois comparer les dates avant d'insérer. :)
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
29 oct. 2008 à 16:09
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>";  
}
0
Rejoignez-nous