Discussion:
Cherche de bout de code
(trop ancien pour répondre)
Yannick VOYEAUD
2013-09-04 21:22:43 UTC
Permalink
Bonsoir,

Dans le cadre du centenaire de la première guerre mondiale j'aurais
besoin d'un petit bout de code.
Soit la date d'aujourd'hui
Je veux afficher un évènement qui se produit il y a 100 ans exactement.
Certains me diront facile!

Sauf que je dois donc aller chercher la correspondance dans une table où
la date est un champ texte que je peux passer en date.
Mon champ est construit comme suit dd/mm/aaaa

Par ailleurs, je sais ce n'est pas le lieu, j'ai un champ qui contient
un texte de près de 500 caractères, quel doit être son type dans MySql.

Amitiés et merci d'avance
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Olivier Miakinen
2013-09-05 05:48:38 UTC
Permalink
Bonjour,
Post by Yannick VOYEAUD
Dans le cadre du centenaire de la première guerre mondiale j'aurais
besoin d'un petit bout de code.
Soit la date d'aujourd'hui
Je veux afficher un évènement qui se produit il y a 100 ans exactement.
Certains me diront facile!
Sauf que je dois donc aller chercher la correspondance dans une table où
la date est un champ texte que je peux passer en date.
Mon champ est construit comme suit dd/mm/aaaa
Quelques pistes :
http://fr2.php.net/strtotime
http://fr2.php.net/calendar
http://fr2.php.net/datetime
Post by Yannick VOYEAUD
Par ailleurs, je sais ce n'est pas le lieu, j'ai un champ qui contient
un texte de près de 500 caractères, quel doit être son type dans MySql.
fr.comp.applications.sgbd ?

Cordialement,
--
Olivier Miakinen
Yannick VOYEAUD
2013-09-05 16:43:31 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Yannick VOYEAUD
Dans le cadre du centenaire de la première guerre mondiale j'aurais
besoin d'un petit bout de code.
Soit la date d'aujourd'hui
Je veux afficher un évènement qui se produit il y a 100 ans exactement.
Certains me diront facile!
Sauf que je dois donc aller chercher la correspondance dans une table où
la date est un champ texte que je peux passer en date.
Mon champ est construit comme suit dd/mm/aaaa
http://fr2.php.net/strtotime
http://fr2.php.net/calendar
http://fr2.php.net/datetime
Post by Yannick VOYEAUD
Par ailleurs, je sais ce n'est pas le lieu, j'ai un champ qui contient
un texte de près de 500 caractères, quel doit être son type dans MySql.
fr.comp.applications.sgbd ?
Cordialement,
Bonsoir,

Merci à Olivier et Undefrog pour leurs réponses.
La troisième piste d'Olivier me semble intéressante à étudier.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
undefrog
2013-09-05 05:49:58 UTC
Permalink
Post by Yannick VOYEAUD
Bonsoir,
Dans le cadre du centenaire de la première guerre mondiale j'aurais
besoin d'un petit bout de code.
Soit la date d'aujourd'hui
Je veux afficher un évènement qui se produit il y a 100 ans exactement.
Certains me diront facile!
Sauf que je dois donc aller chercher la correspondance dans une table où
la date est un champ texte que je peux passer en date.
Mon champ est construit comme suit dd/mm/aaaa
Par ailleurs, je sais ce n'est pas le lieu, j'ai un champ qui contient
un texte de près de 500 caractères, quel doit être son type dans MySql.
Amitiés et merci d'avance
Bonjour,

Je pense que la réponse à ta question est :
$date = date('d-m-Y'); // $date aura la date d'aujourd'hui au format
'dd-mm-aaaa'
$date = date('d-m-Y', $timestamp); // $date aura la date du $timestamp
au format 'dd-mm-aaaa'

Pour ce qui est de MySQL, je dirai qu'un type 'text' conviendrait.

Cordialeent.
Yannick VOYEAUD
2013-09-05 20:15:50 UTC
Permalink
Post by Yannick VOYEAUD
Bonsoir,
Dans le cadre du centenaire de la première guerre mondiale j'aurais
besoin d'un petit bout de code.
Soit la date d'aujourd'hui
Je veux afficher un évènement qui se produit il y a 100 ans exactement.
Certains me diront facile!
Sauf que je dois donc aller chercher la correspondance dans une table où
la date est un champ texte que je peux passer en date.
Mon champ est construit comme suit dd/mm/aaaa
Par ailleurs, je sais ce n'est pas le lieu, j'ai un champ qui contient
un texte de près de 500 caractères, quel doit être son type dans MySql.
Amitiés et merci d'avance
Bonsoir,

Finalement voici le code qui devrait me permettre d'arriver à mes fins
$dateguerre sera la variable à retrouver dans ma table.
Il y a probablement plus court et plus simple mais ceci marche en
affichage de ce que je charche

<?php
echo 'Exemple 1';?><br>

<?php
/* Configure le script en français */
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y'); // affichera 18 09 2003 20:21
?><br>
<?php
/* Affiche : jour_semaine quantième mois année */
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));

?>
<br>
<?php
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);?><br>
<?php
$dateguerre = strftime("%A %e %B %Y", $nextyear);
echo $dateguerre;
?>

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Olivier Miakinen
2013-09-05 22:04:51 UTC
Permalink
Bonjour,
Post by Yannick VOYEAUD
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);?><br>
Comme je suppose que ton script servira entre 2014 et 2018, tu n'auras
pas la surprise que tu pourrais avoir à la date du 29 février 2000 :

<?php
$nextyear = mktime(0, 0, 0, 2, 29, 2000);
echo strftime("%A %e %B %Y", $nextyear);
echo "\n";
$nextyear = mktime(0, 0, 0, 2, 29, 2000-100);
echo strftime("%A %e %B %Y", $nextyear);
?>

Résultat :
--------------------------
Tuesday 29 February 2000
Thursday 1 January 1970
--------------------------

(c'est drôle, j'aurais parié pour le 1er mars 1900)
Denis Beauregard
2013-09-06 01:34:47 UTC
Permalink
Le Fri, 06 Sep 2013 00:04:51 +0200, Olivier Miakinen
Post by Olivier Miakinen
Bonjour,
Post by Yannick VOYEAUD
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);?><br>
Comme je suppose que ton script servira entre 2014 et 2018, tu n'auras
<?php
$nextyear = mktime(0, 0, 0, 2, 29, 2000);
echo strftime("%A %e %B %Y", $nextyear);
echo "\n";
$nextyear = mktime(0, 0, 0, 2, 29, 2000-100);
echo strftime("%A %e %B %Y", $nextyear);
?>
--------------------------
Tuesday 29 February 2000
Thursday 1 January 1970
--------------------------
(c'est drôle, j'aurais parié pour le 1er mars 1900)
je pense que le calendrier Unix débute en 1970, donc un
nombre invalide (le 29 février 1900 n'existe pas) donnera le
1er jour du calendrier Unix. Au fait, c'est le même résultat
sur un PC et sur Linux ?

J'ai essayé ce code directement et j'ai un message d'erreur:
Invalid CRT parameters detected (5 fois pour les 2 strftime)


Denis
Olivier Miakinen
2013-09-06 22:29:04 UTC
Permalink
Post by Denis Beauregard
Post by Olivier Miakinen
--------------------------
Tuesday 29 February 2000
Thursday 1 January 1970
--------------------------
(c'est drôle, j'aurais parié pour le 1er mars 1900)
je pense que le calendrier Unix débute en 1970,
Oui, absolument. La seconde 0 correspond au 1er janvier 1970
à 0 h 0 min 0 s.
Post by Denis Beauregard
donc un
nombre invalide (le 29 février 1900 n'existe pas) donnera le
1er jour du calendrier Unix.
Ce qui m'étonnait, c'est qu'en principe mktime adapte de lui-même
les jours inexistants. Par exemple, le 32 janvier est la même chose
que le premier février, et le 0 février la même chose que le 31
janvier.

Et donc, le bug que j'ai mis en évidence n'était pas celui d'un
29 février inexistant en 1900, mais le fait qu'un timestamp
signé sur 32 bits s'étend de 1901 à 2038, et donc aucune date
de 1900 ne pouvait fonctionner !
Post by Denis Beauregard
Au fait, c'est le même résultat
sur un PC et sur Linux ?
<boutade>
C'est le même résultat sur un Mac et sur MacOS ?
</boutade>

Blague mise à part, le code de Yannick ne peut pas fonctionner sur
Windows avec PHP < 5.1.0, car seuls les timestamps positifs étaient
acceptés (de 1970 à 2038).

Cf. http://fr2.php.net/mktime :
<cit.>
[...] Sur les systèmes où time_t un entier signé sur 32bits, ce qui
est le plus courant de nos jours, la période valide pour year est
quelque part près de 1901 et 2038. Cependant, avant PHP 5.1.0, cette
intervalle était limitée de 1970 à 2038 sur quelques systèmes (i.e.
Windows).
</cit.>
Post by Denis Beauregard
Invalid CRT parameters detected (5 fois pour les 2 strftime)
Si cela fonctionne pour Yannick sur les machines qu'il a, et pour
des dates comprises entre 1913 et 2019, tant mieux pour lui. Cela
dit, Yannick, si tu as le moindre doute, par exemple si tu n'es
pas sûr que tu auras toujours des machines compatibles avec
celles d'aujourd'hui jusqu'à la fin de la période, ou si tu
penses que tes programmes pourraient être réutilisés après
2038, il vaudrait mieux utiliser la classe Datetime, dont je
rappelle la doc : <http://fr2.php.net/datetime>.

En particulier :
<http://fr2.php.net/manual/fr/intro.datetime.php>
Les informations quant à la date et l'heure sont stockées en interne
comme nombre sur 64 bits, aussi, toutes les dates imaginables (y compris
les dates négatives) sont supportées. L'intervalle va de 292 billions
d'années dans le passé, et la même valeur dans le futur.
</>
Yannick VOYEAUD
2013-09-07 00:11:45 UTC
Permalink
Post by Olivier Miakinen
Post by Olivier Miakinen
--------------------------
Tuesday 29 February 2000
Thursday 1 January 1970
--------------------------
(c'est drôle, j'aurais parié pour le 1er mars 1900)
Bonsoir,

Je viens de tester en ligne ton petit bout de gag et je confirme cette
anomalie.
J'ai modifié ton code et l'affichage de 1901 ne marche pas non plus.
Cela reprend en 1902.
Post by Olivier Miakinen
Si cela fonctionne pour Yannick sur les machines qu'il a, et pour
des dates comprises entre 1913 et 2019, tant mieux pour lui. Cela
dit, Yannick, si tu as le moindre doute, par exemple si tu n'es
pas sûr que tu auras toujours des machines compatibles avec
celles d'aujourd'hui jusqu'à la fin de la période, ou si tu
penses que tes programmes pourraient être réutilisés après
2038, il vaudrait mieux utiliser la classe Datetime, dont je
rappelle la doc : <http://fr2.php.net/datetime>.
En fait je teste directement sur le site où ce sera en ligne donc je
suis tranquille. Mon hébergeur utilises en fait des machines sous Debian.
Je viens de faire un test et c'est vrai que si en 2039-2045 je trouvais
à refaire la même chose j'aurais peut-être des soucis mais je pense que
les techniques auront encore changé depuis belle lurette et que je
laisserais le soin à d'autres de faire le travail car j'aurais quand
même 83 balais à ce moment là.
Post by Olivier Miakinen
<http://fr2.php.net/manual/fr/intro.datetime.php>
Les informations quant à la date et l'heure sont stockées en interne
comme nombre sur 64 bits, aussi, toutes les dates imaginables (y compris
les dates négatives) sont supportées. L'intervalle va de 292 billions
d'années dans le passé, et la même valeur dans le futur.
</>
Pour moi cela devient compliqué à mettre en place car je tâtonne en
faisant mes scripts et je fais surtout de la copie de scripts qui
marchent et que j'adapte à chaque fois à mon besoin. Et pour cela il
faut que je comprenne bien ce que chaque commande fait. Quand j'ai un
truc qui marche j'évite de m'en éloigner de trop.

Je trouve que pour un autodidacte complet je me débrouille plutôt bien.
Quand je vois tous ces sites qui se ressemble à cause de l'usage des CMS
réalisé par des 'webmasters', je me dis que mon site aussi imparfait
soit-il, et fait intégralement à la main, vaut largement leur travail
souvent bling-bling.

Si tu te sens le courage de reprendre le code avec les conseils que tu
me donnes je suis preneur.
Il faut d'abord que tu y prennes du plaisir sinon ne le fais pas.
Par contre si tu le fais commentes ton code car ce sera un gage de
réutilisation.

Les choses avancent trop vite par moment et je vois mes limites. Si je
ne comprend pas rapidement le fonctionnement je cherche d'autres
solutions ou je demande de l'aide vers Lyon mais cela m'oblige à des
déplacements que je cherche à éviter.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Olivier Miakinen
2013-09-09 10:57:09 UTC
Permalink
Bonjour,
Post by Yannick VOYEAUD
[...]
Si tu te sens le courage de reprendre le code avec les conseils que tu
me donnes je suis preneur.
Il faut d'abord que tu y prennes du plaisir sinon ne le fais pas.
Par contre si tu le fais commentes ton code car ce sera un gage de
réutilisation.
Je n'en ai pas trop le temps ni l'envie en ce moment, mais du coup
je te suggère de bien commenter toi-même le code que tu utilises.

En particulier, n'oublie pas de préciser :
- la date la plus ancienne du passé (1914 ?) et la date la plus
lointaine du temps présent (2018 ?) pour lesquelles le script
est prévu ;
- le fait qu'il ne fonctionnera pas sur une machine où les
timestamps POSIX sont positifs (date la plus ancienne possible,
1er janvier 1970) ;
- que sur une machine où les timestamps POSIX sont des entiers
signés sur 32 bits, les dates limites sont le 13 décembre 1901
pour la plus reculée, le 19 janvier 2038 pour la plus avancée ;
- qu'il ne faudra donc pas s'en servir pour la période 2039-2045,
à moins d'être sur une machine où le timestamp est un entier
signé sur 64 bits.

Référence : <http://fr.wikipedia.org/wiki/Heure_Unix>.

Cordialement,
--
Olivier Miakinen
Yannick VOYEAUD
2013-09-09 13:04:42 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Yannick VOYEAUD
[...]
Si tu te sens le courage de reprendre le code avec les conseils que tu
me donnes je suis preneur.
Il faut d'abord que tu y prennes du plaisir sinon ne le fais pas.
Par contre si tu le fais commentes ton code car ce sera un gage de
réutilisation.
Je n'en ai pas trop le temps ni l'envie en ce moment, mais du coup
je te suggère de bien commenter toi-même le code que tu utilises.
Bonjour Olivier,

Je te remercie au minimum pour les pistes données qui ont permis de
faire ce que je cherchais. Même si il y a des restrictions d'usage pour
d'autres anniversaires de ce type.
Post by Olivier Miakinen
- la date la plus ancienne du passé (1914 ?) et la date la plus
lointaine du temps présent (2018 ?) pour lesquelles le script
est prévu ;
- le fait qu'il ne fonctionnera pas sur une machine où les
timestamps POSIX sont positifs (date la plus ancienne possible,
1er janvier 1970) ;
- que sur une machine où les timestamps POSIX sont des entiers
signés sur 32 bits, les dates limites sont le 13 décembre 1901
pour la plus reculée, le 19 janvier 2038 pour la plus avancée ;
- qu'il ne faudra donc pas s'en servir pour la période 2039-2045,
à moins d'être sur une machine où le timestamp est un entier
signé sur 64 bits.
Référence : <http://fr.wikipedia.org/wiki/Heure_Unix>.
Cordialement,
Oui je vais inclure ces commentaires dès fois que.

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Yannick VOYEAUD
2013-09-06 12:04:21 UTC
Permalink
Post by Olivier Miakinen
Bonjour,
Post by Yannick VOYEAUD
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);?><br>
Comme je suppose que ton script servira entre 2014 et 2018, tu n'auras
<?php
$nextyear = mktime(0, 0, 0, 2, 29, 2000);
echo strftime("%A %e %B %Y", $nextyear);
echo "\n";
$nextyear = mktime(0, 0, 0, 2, 29, 2000-100);
echo strftime("%A %e %B %Y", $nextyear);
?>
--------------------------
Tuesday 29 February 2000
Thursday 1 January 1970
--------------------------
(c'est drôle, j'aurais parié pour le 1er mars 1900)
Bonjour,

Bien vu pour ce gag éventuel qu'en effet je n'aurais par à supporter :)

Denis ce n'est pas un problème d'OS c'est lié au code php il me semble.

Voici la dernière mouture du code
$datecherche est le véritable élément qui servira ensuite et non
$dateguerre. Au final on devra avoir ceci:
jeudi 6 septembre 1913
blabla blablabla ...
où blabla est le contenu d'un champ en lien avec $datecherche

<?php
/* Configure le script en français */
setlocale(LC_ALL, 'fr_FR');
echo date('d\/m\/Y'); // affichera 18/09/2003
?><br>
<?php
/* Affiche : jour_semaine quantième mois année */
echo strftime("%A %e %B %Y", mktime(date('d\/m\/Y')));
?>
<br>
<?php
$nextyear = mktime(0, 0, 0, date("m"), date("d"), date("Y")-100);
echo strftime("%A %e %B %Y", $nextyear);
?>
<br>
<?php
/* Variable de recherche */
$datecherche = strftime("%d/%m/%Y", $nextyear);
echo "Date de recherche : ";echo $datecherche;
?><br><br>
<?php
/* Affichage de la date de guerre */
$dateguerre = strftime("%A %e %B %Y", $nextyear);
echo "Date de affichée : ";echo $dateguerre;
?>

Amitiés
--
Yannick VOYEAUD
Nul n'a droit au superflu tant que chacun n'a pas son nécessaire
(Camille JOUFFRAY 1841-1924, maire de Vienne)
http://www.voyeaud.org
Continuer la lecture sur narkive:
Loading...