Soit une extraction de date depuis une table MySQL par :
SELECT DATE_FORMAT(h_date_deb,'%d-%m-%Y') AS da1
Nota : la colonne h_date_deb est bien déclaré comme champ date
Certains champs ne comprennent pas le quantième et sont retournés avec
des valeurs comme "00-12-1947" d'autres ne comprennent que l'année, par
exemple "00-00-1947" et d'autres sont "vides" donc avec la valeur
retournée "00-00-0000".
Pour ne garder que les valeurs significatives, j'ai le code php :
Où est mon erreur de raisonnement, puisque l'avant-dernière valeur est
"0" qui n'est pas égal à "00".
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
Où est mon erreur de raisonnement, puisque l'avant-dernière valeur est "0" qui n'est pas égal à "00".
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et que 0 est égal à "a"...
Cf. <http://fr2.php.net/manual/fr/language.operators.comparison.php> <cit.> Si vous comparez un entier avec une chaîne, la chaîne est convertie en un nombre. Si vous comparez deux chaînes numériques, elles seront comparées en tant qu'entiers. </cit.>
Tu peux essayer avec === à la place de ==, ça devrait fonctionner :
Où est mon erreur de raisonnement, puisque l'avant-dernière valeur est
"0" qui n'est pas égal à "00".
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et
que 0 est égal à "a"...
Cf. <http://fr2.php.net/manual/fr/language.operators.comparison.php>
<cit.>
Si vous comparez un entier avec une chaîne, la chaîne est convertie en
un nombre. Si vous comparez deux chaînes numériques, elles seront
comparées en tant qu'entiers.
</cit.>
Tu peux essayer avec === à la place de ==, ça devrait fonctionner :
Où est mon erreur de raisonnement, puisque l'avant-dernière valeur est "0" qui n'est pas égal à "00".
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et que 0 est égal à "a"...
Cf. <http://fr2.php.net/manual/fr/language.operators.comparison.php> <cit.> Si vous comparez un entier avec une chaîne, la chaîne est convertie en un nombre. Si vous comparez deux chaînes numériques, elles seront comparées en tant qu'entiers. </cit.>
Tu peux essayer avec === à la place de ==, ça devrait fonctionner :
Certains champs ne comprennent pas le quantième et sont retournés avec des valeurs comme "00-12-1947" d'autres ne comprennent que l'année, par exemple "00-00-1947" et d'autres sont "vides" donc avec la valeur retournée "00-00-0000".
Pour ne garder que les valeurs significatives, j'ai le code php :
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en remplaçant la boucle par une unique expression régulière :
$da1 = preg_replace('/b00[-0]/', '', $da1);
Le b dans l'expression sert à empêcher le remplacement de "03-07-2000" par "03-07-2". À part cela, la seule différence avec ta boucle serait pour des valeurs que tu ne devrais pas rencontrer, avec un quantième différent de 00 et un mois égal à 00 ou une année commençant par 000, ou un mois différent de 00 et une année commençant par 000.
Certains champs ne comprennent pas le quantième et sont retournés avec
des valeurs comme "00-12-1947" d'autres ne comprennent que l'année, par
exemple "00-00-1947" et d'autres sont "vides" donc avec la valeur
retournée "00-00-0000".
Pour ne garder que les valeurs significatives, j'ai le code php :
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en
remplaçant la boucle par une unique expression régulière :
$da1 = preg_replace('/b00[-0]/', '', $da1);
Le b dans l'expression sert à empêcher le remplacement de "03-07-2000"
par "03-07-2". À part cela, la seule différence avec ta boucle serait
pour des valeurs que tu ne devrais pas rencontrer, avec un quantième
différent de 00 et un mois égal à 00 ou une année commençant par 000,
ou un mois différent de 00 et une année commençant par 000.
Certains champs ne comprennent pas le quantième et sont retournés avec des valeurs comme "00-12-1947" d'autres ne comprennent que l'année, par exemple "00-00-1947" et d'autres sont "vides" donc avec la valeur retournée "00-00-0000".
Pour ne garder que les valeurs significatives, j'ai le code php :
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en remplaçant la boucle par une unique expression régulière :
$da1 = preg_replace('/b00[-0]/', '', $da1);
Le b dans l'expression sert à empêcher le remplacement de "03-07-2000" par "03-07-2". À part cela, la seule différence avec ta boucle serait pour des valeurs que tu ne devrais pas rencontrer, avec un quantième différent de 00 et un mois égal à 00 ou une année commençant par 000, ou un mois différent de 00 et une année commençant par 000.
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en remplaçant la boucle par une unique expression régulière :
Merci. J'aurais appris quelque chose ; c'est donc une bonne journée. -- Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net) Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en
remplaçant la boucle par une unique expression régulière :
Merci. J'aurais appris quelque chose ; c'est donc une bonne journée.
--
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net)
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Outre ma réponse précédente, tu devrais pouvoir faire la même chose en remplaçant la boucle par une unique expression régulière :
Merci. J'aurais appris quelque chose ; c'est donc une bonne journée. -- Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net) Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Mickael Wolff
Olivier Miakinen a écrit :
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et que 0 est égal à "a"...
Alors attention. 08 == "08" est faux ! Encore une aberration du transtypage des chaînes dans PHP...
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et que 0 est égal à "a"...
Alors attention. 08 == "08" est faux !
En effet.
Encore une aberration du transtypage des chaînes dans PHP...
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Le 21/06/2008 09:25, Mickael Wolff a écrit :
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et
que 0 est égal à "a"...
Alors attention. 08 == "08" est faux !
En effet.
Encore une aberration du transtypage des chaînes dans PHP...
Une aberration oui, mais ça n'a rien à voir avec le transtypage des
chaînes. C'est juste que 08 == 0 à cause de la façon dont sont
interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Ah mais si, "0" est égal à "00" ! Tout autant que "1" est égal à "01" et que 0 est égal à "a"...
Alors attention. 08 == "08" est faux !
En effet.
Encore une aberration du transtypage des chaînes dans PHP...
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Mickael Wolff
Olivier Miakinen a écrit :
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. Ça ce serait logique. C'est une des raisons pour lesquelles je « transtype » tout à la main dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Une aberration oui, mais ça n'a rien à voir avec le transtypage des
chaînes. C'est juste que 08 == 0 à cause de la façon dont sont
interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il
faudrait qu'il soit logiquement transtypé en 08. Ça ce serait logique.
C'est une des raisons pour lesquelles je « transtype » tout à la main
dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. Ça ce serait logique. C'est une des raisons pour lesquelles je « transtype » tout à la main dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ??? Tu imagines le souk que ça mettrait dans les lectures de dates et d'heure ? 22/06/2008 -> 22, 6, 2008 22/07/2008 -> 22, 7, 2008 22/08/2008 -> 22, 0, 2008 22/09/2008 -> 22, 0, 2008 22/10/2008 -> 22, 10, 2008 22/11/2008 -> 22, 11, 2008
Ça ce serait logique.
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales. Mais pour la conversion de chaînes de caractères en nombres, ce serait une GROSSE ERREUR à mon avis.
C'est une des raisons pour lesquelles je « transtype » tout à la main dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Et tu transtypes à la main "08" en 0 ???
Mais bon, c'est du pinaillage ;)
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Le 22/06/2008 12:53, Mickael Wolff a écrit :
Une aberration oui, mais ça n'a rien à voir avec le transtypage des
chaînes. C'est juste que 08 == 0 à cause de la façon dont sont
interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il
faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ??? Tu imagines le souk que ça mettrait
dans les lectures de dates et d'heure ?
22/06/2008 -> 22, 6, 2008
22/07/2008 -> 22, 7, 2008
22/08/2008 -> 22, 0, 2008
22/09/2008 -> 22, 0, 2008
22/10/2008 -> 22, 10, 2008
22/11/2008 -> 22, 11, 2008
Ça ce serait logique.
Ben non. Que l'on conserve la notation octale pour les constantes
numériques, je veux bien : les programmeurs qui ne connaissent pas cette
notation ont quand même peu de chances de tomber dessus par erreur en
préfixant par 0 leurs constantes décimales. Mais pour la conversion de
chaînes de caractères en nombres, ce serait une GROSSE ERREUR à mon avis.
C'est une des raisons pour lesquelles je « transtype » tout à la main
dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Et tu transtypes à la main "08" en 0 ???
Mais bon, c'est du pinaillage ;)
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Une aberration oui, mais ça n'a rien à voir avec le transtypage des chaînes. C'est juste que 08 == 0 à cause de la façon dont sont interprétés les nombres en octal... c'est 010 qui est égal à "08" !
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ??? Tu imagines le souk que ça mettrait dans les lectures de dates et d'heure ? 22/06/2008 -> 22, 6, 2008 22/07/2008 -> 22, 7, 2008 22/08/2008 -> 22, 0, 2008 22/09/2008 -> 22, 0, 2008 22/10/2008 -> 22, 10, 2008 22/11/2008 -> 22, 11, 2008
Ça ce serait logique.
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales. Mais pour la conversion de chaînes de caractères en nombres, ce serait une GROSSE ERREUR à mon avis.
C'est une des raisons pour lesquelles je « transtype » tout à la main dans mes script. Sinon, le comportement n'est pas celui auquel je m'attends.
Et tu transtypes à la main "08" en 0 ???
Mais bon, c'est du pinaillage ;)
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Mickael Wolff
Olivier Miakinen a écrit :
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Et tu transtypes à la main "08" en 0 ???
Relis :-D
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je pinaille sans arrêt, et que ça sert à rien. -- Mickaël Wolff aka Lupus Michaelis http://lupusmic.org
Olivier Miakinen a écrit :
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il
faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Ben non. Que l'on conserve la notation octale pour les constantes
numériques, je veux bien : les programmeurs qui ne connaissent pas cette
notation ont quand même peu de chances de tomber dessus par erreur en
préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Et tu transtypes à la main "08" en 0 ???
Relis :-D
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je
pinaille sans arrêt, et que ça sert à rien.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Et tu transtypes à la main "08" en 0 ???
Relis :-D
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je pinaille sans arrêt, et que ça sert à rien. -- Mickaël Wolff aka Lupus Michaelis http://lupusmic.org
Olivier Miakinen
Le 22/06/2008 14:44, Mickael Wolff a écrit :
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Relisons.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Or le nombre 08 n'existe pas en PHP : le 0 initial indique que ce nombre est écrit en octal, et le premier chiffre supérieur à 7 est ignoré ainsi que tout ce qui suit.
Voilà. Maintenant que j'ai relu, quelle valeur voudrais-tu attribuer à la chaîne "08" quand elle est transtypée en entier ?
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Oui. En tout cas qui ne la connaissaient pas avant que je leur en parle (sinon je n'aurais pas su s'ils la connaissaient avant que j'en parle, mais bien sûr après ils ne l'ignoraient plus).
Quant à moi, en dehors des droits d'accès aux fichiers Unix (04755 par exemple) je n'ai jamais utilisé cette notation.
Et tu transtypes à la main "08" en 0 ???
Relis :-D
J'ai relu. Mais je préfèrerais une réponse claire, car je ne suis pas sûr de comprendre tes sous-entendus. Tu transtypes la chaîne "08" en l'entier 8, l'entier 0, ou autre chose ?
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je pinaille sans arrêt, et que ça sert à rien.
Il faut dire que si tu réponds « relis » quand on te pose une question précise, le pinaillage risque de durer longtemps.
Le 22/06/2008 14:44, Mickael Wolff a écrit :
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il
faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Relisons.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est
aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Or le nombre 08 n'existe pas en PHP : le 0 initial indique que ce
nombre est écrit en octal, et le premier chiffre supérieur à 7 est
ignoré ainsi que tout ce qui suit.
Voilà. Maintenant que j'ai relu, quelle valeur voudrais-tu attribuer à
la chaîne "08" quand elle est transtypée en entier ?
Ben non. Que l'on conserve la notation octale pour les constantes
numériques, je veux bien : les programmeurs qui ne connaissent pas cette
notation ont quand même peu de chances de tomber dessus par erreur en
préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Oui. En tout cas qui ne la connaissaient pas avant que je leur en parle
(sinon je n'aurais pas su s'ils la connaissaient avant que j'en parle,
mais bien sûr après ils ne l'ignoraient plus).
Quant à moi, en dehors des droits d'accès aux fichiers Unix (04755 par
exemple) je n'ai jamais utilisé cette notation.
Et tu transtypes à la main "08" en 0 ???
Relis :-D
J'ai relu. Mais je préfèrerais une réponse claire, car je ne suis pas
sûr de comprendre tes sous-entendus. Tu transtypes la chaîne "08" en
l'entier 8, l'entier 0, ou autre chose ?
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je
pinaille sans arrêt, et que ça sert à rien.
Il faut dire que si tu réponds « relis » quand on te pose une question
précise, le pinaillage risque de durer longtemps.
Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08.
... et donc que sa valeur soit 0 ???
Relis :-D
Relisons.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Or le nombre 08 n'existe pas en PHP : le 0 initial indique que ce nombre est écrit en octal, et le premier chiffre supérieur à 7 est ignoré ainsi que tout ce qui suit.
Voilà. Maintenant que j'ai relu, quelle valeur voudrais-tu attribuer à la chaîne "08" quand elle est transtypée en entier ?
Ben non. Que l'on conserve la notation octale pour les constantes numériques, je veux bien : les programmeurs qui ne connaissent pas cette notation ont quand même peu de chances de tomber dessus par erreur en préfixant par 0 leurs constantes décimales.
Tu connais des programmeurs qui ne connaissent pas la notation octale ?
Oui. En tout cas qui ne la connaissaient pas avant que je leur en parle (sinon je n'aurais pas su s'ils la connaissaient avant que j'en parle, mais bien sûr après ils ne l'ignoraient plus).
Quant à moi, en dehors des droits d'accès aux fichiers Unix (04755 par exemple) je n'ai jamais utilisé cette notation.
Et tu transtypes à la main "08" en 0 ???
Relis :-D
J'ai relu. Mais je préfèrerais une réponse claire, car je ne suis pas sûr de comprendre tes sous-entendus. Tu transtypes la chaîne "08" en l'entier 8, l'entier 0, ou autre chose ?
Ben... à ce niveau, je ne trouve pas que ce soit du pinaillage !
Sur certains forums, c'est ce qu'on me sort tout le temps. Que je pinaille sans arrêt, et que ça sert à rien.
Il faut dire que si tu réponds « relis » quand on te pose une question précise, le pinaillage risque de durer longtemps.
Mickael Wolff
Olivier Miakinen a écrit :
Relisons.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Je vais aller me flageller. En espérant trouver des orties fraîches. En effet, je n'avais pas pensé à 08 et 09. Finalement, tu as raison, transtyper '07' en 7 est moins attrape-nigaud que '010' en 8.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est
aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Je vais aller me flageller. En espérant trouver des orties fraîches.
En effet, je n'avais pas pensé à 08 et 09. Finalement, tu as raison,
transtyper '07' en 7 est moins attrape-nigaud que '010' en 8.
Tu as écrit « Oui, parce que "08" est transtypé en 8, ce qui est aberrant. Il faudrait qu'il soit logiquement transtypé en 08. »
Je vais aller me flageller. En espérant trouver des orties fraîches. En effet, je n'avais pas pensé à 08 et 09. Finalement, tu as raison, transtyper '07' en 7 est moins attrape-nigaud que '010' en 8.