Bonjour AB,
Pas de problème.
Je me suis permis d'intervenir car je savais que si ma solution n'était pas idéale, quelqu'un de plus expérimenté
le ferait savoir, et que du coup ça pourrait profiter à tout le monde, à moi comme à la personne qui a écrit le message.
Si au contraire elle convenait bien, ça aurait toujours au mieux profité à celui qui a écrit le message.
Donc ça apporte que du bon à tout le monde, c'est ce que je trouve super sur ce forum
Du coup, ça a remis en question une partie de ma programmation que je souhaite maintenant améliorer.
Entre temps, j'ai rencontré un problème avec la fonction strftime.
Je pense que c'est pas mal que j'en parle à la suite de ce message car ça va dans la continuité du même sujet.
Dans une bdd, j'ai des dates entrées sous le format classique 2015-02-12 (pour prendre la date d'aujourd'hui) que je souhaite garder.
Je récupère une date pour l'afficher dans un champs de formulaire au format 12 février 2015, ce qui marche très bien avec la fonction strftime
(qui remplace donc mon explode et mon implode).
En l'occurrence, il s'agit d'un formulaire de validation permettant de modifier des données saisies dans un autre formulaire.
Maintenant, dans mon fichier de traitement de formulaire, j'utilise toujours un explode et un implode pour la manipulation inverse.
Je m'explique, si l'utilisateur a par exemple changé la date 12 février 2015 par 23 février 2015 dans le formulaire,
il me faut formater 23 février 2015 par 2015-02-23 pour remplacer une date par la nouvelle date dans la bdd.
Là j'ai une difficulté: le strftime semble pas bien gérer la manipulation inverse, à moins que c'est moi qui n'ai pas compris quelque chose d'essentiel.
Pour identifier et résoudre le problème, j'ai créé un page avec un code rudimentaire écrit en php:
<?php
header('Content-Type: text/html; charset=UTF-8');
$date='16 mars 2015';
/* $date représente une date qui a pu être modifiée par l'utilisateur
et que je récupère dans ce format en haut de ma feuille de traitement de formulaire. */
setlocale(LC_TIME, 'fra_fra');
echo $date.'<br \>';
//je veux mettre $date dans un format avec que des chiffres.
$date_format_chiffres=utf8_encode(strftime("%Y-%m-%d",strtotime(htmlentities($date, ENT_QUOTES, 'UTF-8'))));
echo $date_format_chiffres;
?>
Le navigateur ressort:
16 mars 2015
2015-03-17
Premier problème constaté: dans la conversion au nouveau format un jour a été ajouté.
Je ne comprends pas du tout la raison.
Maitenant je prends un autre exemple, avec le même code mais une autre date:
<?php
header('Content-Type: text/html; charset=UTF-8');
$date='16 février 2015';
/* $date représente une date qui a pu être modifiée par l'utilisateur
et que je récupère dans ce format en haut de ma feuille de traitement de formulaire. */
setlocale(LC_TIME, 'fra_fra');
echo $date.'<br \>';
//je veux mettre $date dans un format avec que des chiffres.
$date_format_chiffres=utf8_encode(strftime("%Y-%m-%d",strtotime(htmlentities($date, ENT_QUOTES, 'UTF-8'))));
echo $date_format_chiffres;
?>
Le navigateur ressort:
16 février 2015
1970-01-01
Deuxième problème constaté: dans la conversion au nouveau format la date
gardée est celle du jour à partir duquel le timestamp est compté.
Quand j'ai une nouvelle date pour $date, je me retrouve avec un des deux problèmes
énoncés, et dont je ne comprends pas la cause.
Quelqu'un peut-il m'aider?
