[RESOLU] Changer format date

Baloo-lou
Invité n'ayant pas de compte PHPfrance

04 mars 2021, 01:04

Bonjour à tous,

Débutant en php j'essaie de changer le format de date de ma rubrique "commentaires", j'ai tenté quelque chose mais ça ne marche pas, si quelqu'un veut bien me donner un petit coup de main, je suis preneur.

Pour ma rubrique commentaires j'ai 2 fichiers php.

le 1er : add_comment.php

le 2e : fetch_comment.php

add_comment.php :

Code : Tout sélectionner

<?php //add_comment.php $connect = new PDO(''); $error = ''; $comment_name = ''; $comment_content = ''; $email = ''; if(empty($_POST["comment_name"])) { $error .= '<p class="text-danger"></p>'; } else { $comment_name = $_POST["comment_name"]; } if(empty($_POST["comment_content"])) { $error .= '<p class="text-danger"></p>'; } else { $comment_content = $_POST["comment_content"]; } if(empty($_POST["email"])) { $error .= '<p class="text-danger"></p>'; } else { $email = $_POST["email"]; } if($error == '') { $query = " INSERT INTO tbl_comment (parent_comment_id, comment, comment_sender_name, email) VALUES (:parent_comment_id, :comment, :comment_sender_name, :email) "; $statement = $connect->prepare($query); $statement->execute( array( ':parent_comment_id' => $_POST["comment_id"], ':comment' => $comment_content, ':comment_sender_name' => $comment_name, ':email' => $_POST["email"] ) ); $error = '<label class="validation">Ton message a bien été envoyé !</label>'; } $data = array( 'error' => $error ); echo json_encode($data); ?>
fetch_comment.php :

Code : Tout sélectionner

<?php //fetch_comment.php $connect = new PDO(''); $query = " SELECT * FROM tbl_comment WHERE parent_comment_id = '0' ORDER BY comment_id DESC "; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); $output = ''; foreach($result as $row) { $output .= ' <div class="separator"</div> <div class="box-light"> <div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div><div class="white"><i>'.$row["date"].'</i></div> <div class="texte-com">'.$row["comment"].'</div> <div class="repondre"><button type="button" class="reply" id="'.$row["comment_id"].'">Répondre</button></div> </div> '; $output .= get_reply_comment($connect, $row["comment_id"]); } echo $output; function get_reply_comment($connect, $parent_id = 0, $marginleft = 0) { $query = " SELECT * FROM tbl_comment WHERE parent_comment_id = '".$parent_id."' "; $output = ''; $statement = $connect->prepare($query); $statement->execute(); $result = $statement->fetchAll(); $count = $statement->rowCount(); if($parent_id == 0) { $marginleft = 0; } else { $marginleft = $marginleft + 5; } if($count > 0) { foreach($result as $row) { $output .= ' <div class="separator"</div> <div class="box-light" style="margin-left:'.$marginleft.'px"> <div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div><div class="white"><i>'.$row["date"].'</i></div> <div class="texte-com">'.$row["comment"].'</div> <div class="reponse"><button type="button" class="reply" id="'.$row["comment_id"].'">Répondre</button></div> </div> '; $output .= get_reply_comment($connect, $row["comment_id"], $marginleft); } } return $output; } ?>

sql :

Code : Tout sélectionner

-- -- Database: `testing` -- -- -------------------------------------------------------- -- -- Table structure for table `tbl_comment` -- CREATE TABLE IF NOT EXISTS `tbl_comment` ( `comment_id` int(11) NOT NULL, `parent_comment_id` int(11) NOT NULL, `comment` varchar(200) NOT NULL, `comment_sender_name` varchar(40) NOT NULL, `email` varchar(50) NOT NULL, `actif` enum('oui','non','attente') COLLATE utf8_unicode_ci NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Indexes for dumped tables -- -- -- Indexes for table `tbl_comment` -- ALTER TABLE `tbl_comment` ADD PRIMARY KEY (`comment_id`); -- -- AUTO_INCREMENT for dumped tables -- -- -- AUTO_INCREMENT for table `tbl_comment` -- ALTER TABLE `tbl_comment` MODIFY `comment_id` int(11) NOT NULL AUTO_INCREMENT;


Merci et dsl pour la masse de code

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 01:12

Salut, tu peux utiliser la fonction date à laquelle tu peux fournir un timestamp en deuxième paramètre et dont tu peux définir le format en premier paramètre.
https://www.php.net/manual/fr/function.date.php
https://www.php.net/manual/fr/datetime.format.php

Tu peux également utiliser la classe DateTime et utiliser sa méthode setTimestamp puis sa méthode format. La syntaxe du format est la même qu'avec la fonction date.
https://www.php.net/manual/fr/datetime.settimestamp.php
https://www.php.net/manual/fr/datetime.format.php
Développeur web depuis + de 20 ans

Mammouth du PHP | 2703 Messages

04 mars 2021, 01:22


Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 01:26

D'ailleurs il y a également la fonction strftime. C'est une autre syntaxe pour le format, similaire à celle du date_format sql. ^^
https://www.php.net/manual/fr/function.strftime.php
Développeur web depuis + de 20 ans

Baloo-lou
Invité n'ayant pas de compte PHPfrance

04 mars 2021, 01:31

Merci pour ta réponse. Alors j'avais déjà lu ces manuels mais je n'ai pas réussi à les incorporer à mon code.

Mon dernier test avec la fonction Datetime ressemblait à ça :

Code : Tout sélectionner

<?php //add_comment.php $connect = new PDO(''); $error = ''; $comment_name = ''; $comment_content = ''; $email = ''; $date = new DateTime('01-01-2000'); echo $date->format('d-m-Y H:i:s'); if(empty($_POST["comment_name"])) { $error .= '<p class="text-danger"></p>'; } else { $comment_name = $_POST["comment_name"]; } if(empty($_POST["comment_content"])) { $error .= '<p class="text-danger"></p>'; } else { $comment_content = $_POST["comment_content"]; } if(empty($_POST["email"])) { $error .= '<p class="text-danger"></p>'; } else { $email = $_POST["email"]; } if($error == '') { $query = " INSERT INTO tbl_comment (parent_comment_id, comment, comment_sender_name, email) VALUES (:parent_comment_id, :comment, :comment_sender_name, :email) "; $statement = $connect->prepare($query); $statement->execute( array( ':parent_comment_id' => $_POST["comment_id"], ':comment' => $comment_content, ':comment_sender_name' => $comment_name, ':email' => $_POST["email"] ) ); $error = '<label class="validation">Ton message a bien été envoyé !</label>'; } $data = array( 'error' => $error ); echo json_encode($data); ?>
ça ne fonctionnait pas

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 01:36

Les exemples sont tout de même assez explicites. Dans ton code, là où tu affiches la date ça donnerait quelque chose comme ça :
date('d/m/Y', $row['date'])
avec $row['date'] qui contient le timestamp.

Et si tu tiens à utiliser DateTime, directement dans la concaténation (le $output .= ...) :
(new DateTime())->setTimestamp($row['date'])->format('d/m/Y')
Développeur web depuis + de 20 ans

Baloo-lou
Invité n'ayant pas de compte PHPfrance

04 mars 2021, 02:18

Merci pour ton aide,

J'ai donc mis

Code : Tout sélectionner

<div class="chapeau">@ <b>'.$row["comment_sender_name"].'</b></div><div class="white"><i>'.date('d/m/Y', $row['date']).'</i></div>
Déjà je te remercie car enfin il y a du changement, ça fait longtemps que j'essaie des choses.
Par contre la date affichée est 01/01/1970.

Ai-je mal fait quelque chose ?

Baloo-lou
Invité n'ayant pas de compte PHPfrance

04 mars 2021, 02:24

J'aimerai bien savoir le faire en sql aussi, j'ai essayé d'incorporer

Code : Tout sélectionner

SELECT DATE_FORMAT("2018-09-24", "%D %b %Y"); -- résultat : "24th Sep 2018"
mais sans résultat..
Je fatigue peut-être ^^

En tous cas tu m'as apporté beaucoup de solutions, je vais réessayer tout ça demain, j'y verrai peut-être plus clair. Encore merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

04 mars 2021, 10:49

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Mammouth du PHP | 1609 Messages

04 mars 2021, 12:29

Par contre la date affichée est 01/01/1970.

Ai-je mal fait quelque chose ?
Il doit y avoir un problème avec le timestamp. Normalement d'après le create table il devrait être égale au current timestamp lors de l'insertion de la ligne étant donné que tu ne sembles pas le définir toi même dans la requête d'insertion. Tu peux vérifier les timestamps que tu as en base de données, par exemple avec cette page http://www.timestamp.fr/? où tu pourras tester tes timestamps pour voir à quelle date ils correspondent.
Développeur web depuis + de 20 ans

Baloo-lou
Invité n'ayant pas de compte PHPfrance

06 mars 2021, 01:35

Je n'ai pas trouvé les timestamps dont tu me parles en base de donnée et je ne comprends pas bien ce que ça ferait de les tester..

Baloo-lou
Invité n'ayant pas de compte PHPfrance

06 mars 2021, 02:01

J'ai cette ligne quand j'édite un message dans ma base de donnée, je ne sais pas si c'est de ça que tu me parles ?

date timestamp 2021-03-06 00:55:21

Avatar du membre
Mammouth du PHP | 1609 Messages

06 mars 2021, 18:37

Salut, que te donnes un echo $row['date']; ?

En tout cas 2021-03-06 00:55:21 ça ressemble plus à un datetime qu'à un timestamp. Peut être ton gestionnaire de base de données fait la conversion à l'affichage ?

Si le echo affiche une date de la forme 2021-03-06 00:55:21, tu peux tenter :
date('d/m/Y', strtotime($row['date']));
// ou
(new DateTime($row['date']))->format('d/m/Y');
Modifié en dernier par Saian le 07 mars 2021, 01:41, modifié 1 fois.
Développeur web depuis + de 20 ans

Baloo-lou
Invité n'ayant pas de compte PHPfrance

07 mars 2021, 01:23

Bonsoir,

Alors avec echo $row['date'] j'avais une erreur de syntaxe mais j'ai quand même essayé :

(new DateTime(row['date']))->format('d/m/Y'); ==> J'avais plusieurs messages d'erreurs

et

date('d/m/Y', strtotime($row['date'])); ==> Fonctionne parfaitement

Je ne savais pas ce qu'était "strtotime" du coup j'ai cherché sur internet donc je ne te demande pas de me faire un cours ^^

Merci d'avoir prit le temps de m'aider, la date s'affiche comme je le souhaite. Je passe le sujet en résolu. Merci !

Avatar du membre
Mammouth du PHP | 1609 Messages

07 mars 2021, 01:46

Quand on écrit un code comme ça sans le tester, ça arrive de faire des petites erreurs de syntaxe et c'est quand même la base de savoir les corriger quand tu l'intègres dans ton fichier. :P

Le point virgule j'ai pas jugé nécessaire de le mettre et le $ bah oui je l'ai oublié. :oops:

Content d'avoir pu t'aider.
Développeur web depuis + de 20 ans