PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 05-06-2011 21:32:28

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Calcul de Date, à votre clavier!

Bonsoir,

J'ai envie de faire comme Pierrot s'est amusé à faire il y a quelques temps déjà, c'est à dire de vous proposer un petit problème à résoudre uniquement dans un contexte MySQL et sans passer par des procédures stockées (une fois la solution trouvée, on peut transposer facilement).

C'est un problème que j'ai résolu il y a très peu de temps dans le cadre d'un projet client.

Le voici :

à Partir de l'année X et de la semaine Y, calculer le jour de l'année du lundi de la semaine Y et le jour de l'année du dimanche de la semaine Y pour l'année X.

Pour le résoudre, le cahier des charges est le suivant : utiliser le moins de ressources serveur possible, et donc un temps de calcul réduit à son strict nécessaire. Les fonctions utilisées ne doivent pas interdire la mise en cache de la requête du moteur qui les utilisera.

A vos claviers smile

Dernière modification par Jc (05-06-2011 21:43:46)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#2 06-06-2011 11:20:09

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

c'est con si c'est moi qui donne la solution big_smile:D
a++

Hors ligne

#3 06-06-2011 12:46:28

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Calcul de Date, à votre clavier!

Je pense qu'il faut préciser que la semaine commence le dimanche

DAYOFWEEK(date)

Retourne l'index du jour de la semaine : pour date (1 = Dimanche, 2 = Lundi, ... 7 = Samedi). Ces index correspondent au standard ODBC :


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 06-06-2011 12:48:48

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Calcul de Date, à votre clavier!

On peut reformuler l'énoncé :

Comment obtenir, uniquement dans un contexte MySQL et sans passer par des procédures stockées, le quantième annuel M et le quantième annuel S du lundi et du dimanche de la semaine W de l'année Y ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 06-06-2011 14:19:57

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Bonjour,

Oui, vous avez tous les deux raisons big_smile mais le résultat n'est pas encore là. big_smile:D

Dites donc, vous en mettez du temps big_smile big_smile

PS: Mode Pierrot Off. lol


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#6 06-06-2011 14:21:29

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

Comment obtenir, uniquement dans un contexte MySQL et sans passer par des procédures stockées, la date du lundi et du dimanche de la semaine NumeroSemaine de l'année Annee ?
a++

Hors ligne

#7 06-06-2011 14:24:21

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

et j'ajouterai :
sans sodomiser les mouches en plein vol avec des gants de boxes big_smile:D
a+

Hors ligne

#8 06-06-2011 14:25:46

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

@Pierrot:  ca fait partie du calcul intermédiaire principal Pierrot wink on va pas te le dire, car si on appele myDATE_lundi et myDATE_Dimanche les résultats respectifs de tes 2 questions, suffit de faire DAYOFYEAR(myDATE_lundi) et DAYOFYEAR(myDATE_Dimanche) pour avoir le résultat, et ça, tout le monde sait le faire, même toi lol

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#9 06-06-2011 14:27:55

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

lol... et je ne parlais pas des mouches .... lol


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 06-06-2011 14:32:00

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

c'est bien ce que je pensais, tu te complique la vie wink
a++

Hors ligne

#11 06-06-2011 14:34:24

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Et non... pas de procédure stockées, donc pas d'utilisation d'array pour les mois de l'année wink, et puis un code rapide c'est un code simple et pas long entre autres. wink

EDIT: je rigolais tellement que j'en ai dit une bétise. On se fou des mois de l'année c'est certain (quoique... smile ), mais pour savoir quel jour tombe un lundi, on est bien obligé de savoir quel jour est le lundi et quel jour est le dimanche, donc leur date respective.

Dernière modification par Jc (06-06-2011 14:44:15)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#12 06-06-2011 14:45:15

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

c'est enfantin big_smile:D
date_sub pour avoir le lundi et date_add pour avoir le dimanche wink
a++

Hors ligne

#13 06-06-2011 14:50:23

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Juste par curiosité tu pourrais me donner ton temps de réponse serveur sur par exemple l'année 2010 et le lundi de la 42e Semaine?


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 06-06-2011 14:53:10

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Moi j'ai 0.0005 sec qui fait mieux? (résultat : 291)

Dernière modification par Jc (06-06-2011 14:54:27)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#15 06-06-2011 16:24:25

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Alors, je suis peut être un noob, mais je ne vois pas comment dans ton algo tu peut utiliser date_sub(), (mois perso je ne l'utilise pas). Mystère et boule de gomme.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#16 06-06-2011 17:25:22

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Par contre Pierrot, tu m'as donné une idée qui m'a fait réduire la longueur de ma routine par 2, mais malheureusement celle-ci ne marche pas pour les années bisextiles (écart de 2 jours) ... et elle tournait  en moyenne à 0.0004s .

Dernière modification par Jc (06-06-2011 17:26:25)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#17 06-06-2011 20:02:51

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Calcul de Date, à votre clavier!

Bon, j'ai couplé les 2 fonctions MySQL STR_TO_DATE et DAYOFYEAR et j'obtiens :  Affichage des enregistrements 0 - 0 (1 total, Traitement en 0.0005 sec.)

SELECT DAYOFYEAR(STR_TO_DATE('2010 41 1','%X %V %w')) AS dimanche,DAYOFYEAR(STR_TO_DATE('2010 41 2','%X %V %w')) AS Lundi

Apparemment il faut retrancher 1 au numéro de la semaine, j'imagine que ça doit pouvoir se paramétrer mais je n'ai pas le temps de chercher.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#18 06-06-2011 21:24:29

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Bonsoir,

MK... sacré MK. A moi de te tirer mon chapeau. Voici ce que tu cherchais à faire pour la 42e semaine de 2010.

SELECT DAYOFYEAR( STR_TO_DATE( '2010 42 1', '%X %V %w' ) ) AS Lundi, DAYOFYEAR( STR_TO_DATE( '2010 43 0', '%X %V %w' ) ) AS dimanche

Jamais je n'aurais pensé à cet algo!!!!
Un soucis cependant elle fonctionne toujours sauf pour le lundi sur une année bissextile. J'ai failli mettre la mienne à la poubelle! mais j'ai pas d'idée comment corriger ce soucis avec ta solution.

EDIT: Petite erreur de ma part. Elle fonctionne bien! et elle est plus rapide que la mienne (la tienne reste toujours entre 0.0004 et 0.0005 alors que la mienne monte parfois à 0.0007).

Ma soluce:
[Code=MySQL]
SELECT DAYOFYEAR(DATE_ADD(DATE(DATE_ADD(MAKEDATE(2010,1),INTERVAL (42-1) WEEK)),INTERVAL (9-DAYOFWEEK(MAKEDATE(2010,1))) DAY)) as Lundi,
DAYOFYEAR(DATE_ADD(DATE(DATE_ADD(MAKEDATE(2010,1),INTERVAL (42) WEEK)),INTERVAL (8-DAYOFWEEK(MAKEDATE(2010,1))) DAY)) as Dimanche
[/Code]

Dernière modification par Jc (06-06-2011 21:39:21)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#19 06-06-2011 21:32:17

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

y a encore plus simple les enfants wink
a++

Hors ligne

#20 06-06-2011 21:35:47

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

montre nous pierrot! allez chiche! big_smile


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#21 06-06-2011 21:49:10

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Calcul de Date, à votre clavier!

suis a la maison, vé pas tester sur ma tablette wink
mais, sur mon pc de bureau, j'avais déjà la solution ce matin wink
je la poste demain wink


>>Alors, je suis peut être un noob, mais je ne vois pas comment dans ton algo tu peut utiliser date_sub()
bizarre qd même roll

a++

Hors ligne

#22 06-06-2011 21:53:41

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Calcul de Date, à votre clavier!

Ben pour faire plus simple, y a pas 36 façons c'est de partir sur 42x7 et d'appliquer un DATE_SUB, enfin je suppose que c'est comme ça que tu l'as vu, mais pour faire un date_sub, faut partir d'une date, et 42x7 ce n'est pas une date. Et dès que tu le transformes en date, ca deviens plus long que ce qu'à fait MK, car ensuite faut calculer le diff de jour, sans parler que ce n'est pas compatible avec les années bissextiles présenté comme cela.

Dernière modification par Jc (06-06-2011 21:55:36)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#23 08-06-2011 13:20:33

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Calcul de Date, à votre clavier!

M'est avis que l'Pierrot est dans la lune.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums