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

bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 28 oct. 2008 à 11:36 - Dernière réponse : bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention
- 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
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 28 oct. 2008 à 11:53
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.

Merci jreaux62 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de jreaux62
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 28 oct. 2008 à 12:04
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
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 28 oct. 2008 à 12:52
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
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 28 oct. 2008 à 15:35
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
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 28 oct. 2008 à 15:44
0
Merci
Je dois comparer les dates avant d'insérer. :)
Commenter la réponse de bruno3591
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 29 oct. 2008 à 16:09
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.