Mysql et php renvoient pas le bon N° de semaine ou l'année

Mysql et php renvoient pas le bon N° de semaine ou l'année - PHP - Programmation

Marsh Posté le 04-01-2013 à 16:37:42    

Bonjour,
 
Au passage du 01/01/2013, je me suis rendu compte que le bug sur le n° de semaine et l'année renvoyés par Mysql ou PHP n'étaient toujours pas corrigé. Je m'explique : pour la date du 31/12/2012, le n° de semaine, d'après la norme iso est 01. Donc, si je veux avoir l'année et le N° de semaine associés à cette date, je devrais obtenir, pour être cohérent "2013-01" puisque la date est le 1er jour de la première semaine de 2013.
 
Problème, Mysql, avec sa fonction YEARWEEK() renvoie 201253 donc la mauvaise année et le mauvais n° de semaine.
 
Avec PHP, quand je fais date("Y-W" strtotime("2012-12-31" )) il me renvoie "2012-01" : là, j'ai la mauvaise année mais le bon n° de semaine.
 
Défaut constaté sur des mysql 5.0.45 et 5.1.46 et des PHP 5.2.4 et 5.3.3
 
Conclusion : que faire? Pour PHP, j'ai fait une fonction qui renvoie la bonne année et le bon n° de semaine pour une date donnée mais pour Mysql, je fais comment? :/ Y'a t-il une version plus récente qui corrige ce bug?
 
Merci par avance.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-01-2013 à 16:37:42   

Reply

Marsh Posté le 05-01-2013 à 01:43:22    

En PHP :  
 

Code :
  1. echo date('o', mktime(0, 0, 0, 12, 31, 2012));


 
répond-t-il à ton problème ?
 
 
Pour MySQL, c'est un bug documenté
http://dev.mysql.com/doc/refman/5. [...] n_yearweek
 
Mais je ne comprends pas pourquoi tu cherches à effectuer ce type d'interrogation en MySQL. PHP ne te suffit-il pas pour préparamétrer tes requêtes SQL ?


Message édité par CyberDenix le 05-01-2013 à 01:54:38

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 05-01-2013 à 10:39:30    

Oui normalement, PHP est suffisant.
L'heure système de votre serveur n'est peut-être pas à jour?


---------------
Besoin d'aide pour votre projet? agence web
Reply

Marsh Posté le 06-01-2013 à 14:17:09    

En fait, je voulais faire une requête du genre "trouves moi tous les enregistrements de la table "X" dont le champ de type Date "Y" fait partie de la semaine "201301" (ou une autre année et semaine, l'année et semaine étant calculées en fonction d'une variable php contenant une date).
 
Finalement, j'ai résolu mon pb en calculant les dates de début et de fin de l'année et semaine provenant de la date filée en paramètre et après dans mon sql, je fais un between de mon champ "Y" entre les 2 date de début et de fin calculées précédemment,, mais c'est moins pratique.
 
Pa rapport au bug documenté "The year in the result may be different from the year in the date argument for the first and the last week of the year. ", ils disent pas que c'est un bug, juste que l'année peut être différente pour la dernière et première semaine d'une année. Et ça, c'est juste. C'est le n° de semaine qui est faux :/ Et ça, ils le disent pas. En efet, 2012 n'a pas 53 semaines mais 52... Je ne comprends pas que des gens aussi bons que ceux qui codent Mysql, depuis le temps (parce que ce n'est pas nouveau ce bug, il existe depuis mysql 3.23 au moins), n'aient pas corrigé ça... :??:
 
Edit : merci pour le paramètre 'o' de date(). J'étais passé à côté, j'avais cherché dans la section relative aux semaines :(


Message édité par rufo le 06-01-2013 à 14:20:26

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-01-2013 à 21:01:24    

J'étais ironique.  :D  
 
On est bien d'accord sur l'histoire des 52/53 semaines, c'est du grand n'importe quoi.
 
Ouvre un bug mysql, ca coûte rien de le signaler comme "bug" et non comme feature !


Message édité par CyberDenix le 06-01-2013 à 21:02:18

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 17-04-2013 à 13:37:20    

Bonjour,
je viens d'expérimenter le code suivant :
MID(YEARWEEK(n.date_creation,1),5,2)
avec succès.
est-ce que cela fonctionne pour vous ?

Reply

Marsh Posté le 17-04-2013 à 15:03:26    

y compris pour le 31/12/2012 et le 01/01/2013 ? Vous trouvez bien 2013-01?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-04-2013 à 19:36:34    

Nope, 53 chez moi :D
 
Je connaissais pas ce bug...

Reply

Marsh Posté le 18-04-2013 à 09:41:34    

C'est vrai que ça peut surprendre un bug aussi con-con qui dure depuis si longtemps sur un produit comme Mysql et qui serait tellement facile à corriger :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed