GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Bayshore le 20 Juin 2008, 17:20:50

Titre: [RÉSOLU] Afficher le jour de la semaine en fonction d'un date
Posté par: Bayshore le 20 Juin 2008, 17:20:50
Salut,

j'aimerais afficher le jour de la semaine en récupérant la date, mais je ne sais pas trop comment m'y prendre. :(

Si quelqu'un pourrait m'éclairer... :happy


Alexandre
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Nikko™ le 20 Juin 2008, 18:12:48
Salut

Utilise ca  ;) :

http://pastebin.gtaonline.fr/pastebin.php?show=445 (http://pastebin.gtaonline.fr/pastebin.php?show=445)

++
nikko
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Bayshore le 20 Juin 2008, 19:44:22
Ça ne m'aide pas...

++
Alexandre
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Nikko™ le 20 Juin 2008, 20:19:43
Bah tu le prend comme exemple ....

++
nikko
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Bayshore le 21 Juin 2008, 06:40:49
Désolé mais je ne vois nul part ce que je cherche là-dedans.


++
Alexandre
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Syg le 25 Juin 2008, 12:25:50
Pour faire ce que tu veux faire, il faut tout d'abord que tu convertisses ta date en jour julien (qui est le nombre de jour écoulé entre le 1° janvier 4713 av JC et la date en question).
Une fois que tu as ce nombre, il te suffit de faire un modulo 7 pour trouver le jour de la semaine.

J'ai une fonction C qui donne le jour julien pour une date donnée. Comme le C et le PAWN sont très proches, tu n'aura surement pas de difficulté ç faire le portage (parce que moi j'ai pas le temps). Mais fait attention aux conversions entre le type de données.

Voici la fonction :
unsigned int JourJulien (unsigned int Jour_P, unsigned  int Mois_P, unsigned int Annee_P)
{
double Tmp1_L, Tmp2_L;
double JourJulien_L;

   /* Recalage de l'annee et du mois */
   if (Mois_P < 3)
   {
      Annee_P--;
      Mois_P += 12;
   }

   /* Calcul du jour Julien */
   Tmp1_L = (int)(Annee_P/100.0);
   Tmp2_L = 2.0 - Tmp1_L + (int)(Tmp1_L/4.0);
   JourJulien_L = (int)(365.25 * Annee_P) + (int)(30.6001 * (Mois_P+1)) + Jour_P + Tmp2_L + 1720994;

   /* Retour de la fonction */
   return (unsigned int)JourJulien_L;
}

Ensuite, tu prends le retour de cette fonction, tu fais un modulo 7 (Nombre%7) et tu obtiens un chiffre entre 0 et 6.
0 -> Mardi, 1->Mercredi, ..., 6->Lundi.

Pour vérifier que tu as correctement écrit la fonction en PAWN, le jour julien du 25 juin 2008 est 2454642.

++
Syg
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: [StAfF]MaN le 27 Juin 2008, 19:51:05
C'est comme si un chinois venait de me dire "comment ça va ??"

En gros, faut capiche quand même parce que la xD
Titre: Re : Afficher le jour de la semaine en fonction d'un date
Posté par: Bayshore le 28 Juin 2008, 15:38:33
Salut,

merci pour la fonction Syg, par contre j'ai quelques difficultés à adapter. :(

Code: (pawn) [Sélectionner]
public JourJulien(Jour_P, Mois_P, Annee_P)
{
new Tmp1_L, Tmp2_L;
new JourJulien_L;

// Recalage de l'année et du mois
if(Mois_P < 3)
{
    Annee_P--;
    Mois_P += 12;
}

// Calcul du Jour Julien
Tmp1_L = Annee_P / 100;
Tmp2_L = 2 - Tmp1_L + Tmp1_L / 4;
JourJulien_L = 365.25 * Annee_P  +  30.6001 * (Mois_P + 1)  +  Jour_P  +  Tmp2_L  +  1720994;

return JourJulien_L;
}

Code: (pawn) [Sélectionner]
new zecko, moduloz0r;
zecko = JourJulien(25, 6, 2008);
moduloz0r = zecko % 7;
new stringz0r[48];
format(stringz0r, 72, "%d (original:2454642), modulo : %d (original:1)", zecko, moduloz0r);
SendClientMessageToAll(cwhite, stringz0r);

Me renvoit: (http://www.picdo.net/Fichiers/9d0c295371bc9e625d5d2045385d64b/sa-mp-010.png) :(

De plus, JourJulien_L = 365.25 * Annee_P  +  30.6001 * (Mois_P + 1)  +  Jour_P  +  Tmp2_L  +  1720994; me renvoit Tag Mismatch comme warning. :(


++
Alexandre


EDIT: OoOh, un floatround() sur le return et passé JourJulien_L enFloat et ça marche. :ohmy :king