Coder un calendrier inventé

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu Coder un calendrier inventé

Message par Eyeha le Lun 1 Oct 2012 - 22:02

Bonjour à tous Smile

J'ai beaucoup cherché mais malheureusement je ne trouve rien sur le sujet qui me préoccupe...

J'ai inventé un calendrier pour mon forum mais je ne trouve pas de codage me permettant d'afficher en temps réel quelle est la date d'aujourd'hui dans mon calendrier inventé. (j'espère que c'est compréhensible ce que je raconte ^^)

Est-ce que l'un de vous saurait comment ou où je peux trouver ça? Very Happy

Merci d'avance !!!


Dernière édition par Eyeha le Mer 31 Oct 2012 - 14:39, édité 1 fois

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Mar 2 Oct 2012 - 15:00

Mon Dieu, dites-moi que quelqu'un peut m'aider... Crying or Very sad

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Mar 2 Oct 2012 - 15:05

Bonjour,


Cela dépend de ce que c'est ce calendrier ( mois? autres choses? nombre de mois? ... ), et de quel est la date d'aujourd'hui minuit dans le calendrier. Et à quelle vitesse le temps y passe par rapport au notre.

Et si il y a des trucs du style année bissextile à prendre en compte, ça peut également compliquer les choses.

Ensuite en ayant tout cela, il devrait y avoir moyen de faire un script qui affiche la date dans le calendrier inventé à partir de la date actuelle.

Cordialement.

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Mar 2 Oct 2012 - 15:12

You ouh ! Merci pour la réponse Smile

Mon calendrier sera fait de la façon suivante:

Un an comportera 9 mois de 20 jours chacun, chaque mois se composé de 4 semaines de 5 jours chacune.

Du coup, tout ça nous donne un calendrier de 180 jours c'est à dire la moitié environ de notre cher calendrier actuel Smile Ce qui fait que tous les 6 mois, mon monde aura passé un an de plus!

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Mar 2 Oct 2012 - 16:41

Vous pourriez mettre un code comme ceci dans le javascript

Code:
$(function(){

    if(!$('.idate').length) return;

    var mois= ["vendémiaire", "frimaire", "nivôse", "pluviôse", "germinal", "floréal", "prairial", "messidor", "fructidor"];

    var jours= ["lundi","mardi","vendredi","samedi", "dimanche"];
   
    var seconde_par_vrai_seconde= 1;
    var seconde_par_minute= 60;
    var minute_par_heure= 60;
    var heure_par_jour= 24;
    var jour_par_mois= jours.length * 4;

    // Nombre de seconde au bout duquel la date doit être mise à jour
    var mise_a_jour= 1;

    // date le 1er janvier 1970 à 00:00:00
    var s_annee= 1970;
    var s_mois= 0; // 0 est le premier mois de l'année
    var s_jour= 0; // 0 est le premier jour du mois
    var s_heure= 0;
    var s_minute= 0;
    var s_seconde= 0;
    var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine

    // décalage horaire par rapport à greenwitch ( 1 pour +1h )
    var decalage= 0;

    var last_date;

    var update_time= function(){

        var cur_date = Math.floor(Math.floor(+new Date()/1000) * seconde_par_vrai_seconde);
        cur_date+= (decalage * seconde_par_minute * minute_par_heure);
     
        if(last_date)
        {
            cur_date-= last_date;
            last_date+= cur_date;
        }
        else
        {
            last_date= cur_date;
        }

        do
        {
            if(cur_date <= 0) break;
            // Calcul secondes
            var reste= cur_date % seconde_par_minute;
            cur_date= ( cur_date - reste ) / seconde_par_minute;
            s_seconde+= reste;
            if(s_seconde >= seconde_par_minute)
            {
                s_seconde-= seconde_par_minute;
                cur_date++;
            }

            if(cur_date <= 0) break;
            // Calcul minutes
            reste= cur_date % minute_par_heure;
            cur_date= ( cur_date - reste ) / minute_par_heure;
            s_minute+= reste;
            if(s_minute >= minute_par_heure)
            {
                s_minute-= minute_par_heure;
                cur_date++;
            }

            if(cur_date <= 0) break;
            // Calcul heures
            reste= cur_date % heure_par_jour;
            cur_date= ( cur_date - reste ) / heure_par_jour;
            s_heure+= reste;
            if(s_heure >= heure_par_jour)
            {
                s_heure-= heure_par_jour;
                cur_date++;
            }

            if(cur_date <= 0) break;
            // Calcul jour de semaine
            reste= cur_date % jours.length;
            s_jour_de_semaine+= reste;
            if(s_jour_de_semaine >= jours.length)
            {
                s_jour_de_semaine-= jours.length;
            }

            // Calcul jours du mois
            reste= cur_date % jour_par_mois;
            cur_date= ( cur_date - reste ) / jour_par_mois;
            s_jour+= reste;
            if(s_jour >= jour_par_mois)
            {
                s_jour-= jour_par_mois;
                cur_date++;
            }

            if(cur_date <= 0) break;
            // Calcul du mois
            reste= cur_date % mois.length;
            cur_date= ( cur_date - reste ) / mois.length;
            s_mois+= reste;
            if(s_mois >= mois.length)
            {
                s_mois-= mois.length;
                cur_date++;
            }

            if(cur_date <= 0) break;
            s_annee+= cur_date;
        } while (0);

        $('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);

    };

    update_time();

    setInterval(update_time,1000 * mise_a_jour);

});
( dans PA > Divers > Gestion des codes javascript, et le mettre sur les pages où vous voulez afficher la date )

Et ensuite mettre sur la page :

Code:
<span class="idate"></span>
Une ou plusieurs fois où vous le souhaitez, à l'intérieur sera mis une date du style "lundi 16 prairial 2056 12:23:35".

Pour ce qui est des modifications :

Code:
var mois= ["vendémiaire", "frimaire", "nivôse", "pluviôse", "germinal", "floréal", "prairial", "messidor", "fructidor"];
C'est la liste des mois, il faut le faire sur le même format que cela ( par exemple pour nos mois à nous, ça serait :

Code:
var mois= ["janvier","février","mars","avril","mai","juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" ];


Code:
var jours= ["lundi","mardi","vendredi","samedi", "dimanche"];
Pareillement, ce sont les jours de la semaine.

Code:
var seconde_par_vrai_seconde= 1;
C'est le nombre de seconde par seconde, donc si par exemple on mettait deux, les secondes passeraient 2 fois plus vite dans le calendrier inventé.

Code:
var seconde_par_minute= 60;
var minute_par_heure= 60;
var heure_par_jour= 24;
var jour_par_mois= jours.length * 4;
cela me semble être clair, j'ai mis les chiffres normaux. pour nombre de jour par mois, j'ai mis 4 semaines ( le nombre de jour existants * 4 ).

Code:
    // Nombre de seconde au bout duquel la date doit être mise à jour
    var mise_a_jour= 1;
Si dans la ligne d'affichage on affiche pas les secondes, on pourrait mettre 60 par exemple ( pour ne pas faire 60 calculs inutiles ).

Code:
    // date le 1er janvier 1970 à 00:00:00
    var s_annee= 1970;
    var s_mois= 0; // 0 est le premier mois de l'année
    var s_jour= 0; // 0 est le premier jour du mois
    var s_heure= 0;
    var s_minute= 0;
    var s_seconde= 0;
La date dans le calendrier inventé, du 1er janvier 1970 à minuit pile.

Code:
var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine
Le jour de la semaine de ce 1er janvier 1970 ( par exemple en mettant 1 ce serait le deuxième jour de la semaine, donc l'équivalent du mardi ).

Code:
    // décalage horaire par rapport à greenwitch ( 1 pour +1h )
    var decalage= 0;
Pour mettre des heures en plus ou en moins dans le calendrier inventé.


Puis pour finir, il y a cette ligne qui est le format de la date qu'on mettra :

Code:
$('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);

=> jours[s_jour_de_semaine] : c'est le jour en lettres
=> (s_jour+1) : c'est le numéro du jour ( pour facilité les calcules on utilise un premier jour 0, donc pour que le premier jour soit 1 à l'affichage on fait +1
=> mois[s_mois] : c'est le mois en lettre ( si on voulait afficher le numéro du mois on pourrait faire (s_mois+1) )
=> s_annee : l'année
=> s_heure : l'heure
=> s_minute : la minute
=> s_seconde : la seconde

Donc en modifiant tout ces paramètres on devrait pouvoir faire pas mal de chose ( mais les mois doivent avoir le même nombre de jour, le changement d'heure doit se faire à la main et pas d'année bissextile ).

Cordialement.

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Ven 5 Oct 2012 - 21:34

Oh mon Dieu mais ça à l'air génial *-*

Je vais essayer ça tout de suite, si j'ai un problème, je reposerais ma question ici.

Merci beaucoup !!!!

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Calendrier inventé souci de compréhension

Message par Eyeha le Mer 17 Oct 2012 - 18:12

Bonjour,

J'ai été aidé récemment par Ea, qui m'a donné un code javascript pour créer mon propre calendrier sur mon forum.

Le souci est que je viens de tout mettre en place pour lancer mon forum ce soir sauf que malheureusement, le topic a été fermé et verrouillé donc je ne peux pas poser mes questions dedans.

Il y a certaines parties du code que je ne comprends pas et lorsque j'ai essayé de les remplir ça ne m'a pas donné le résultat escompté.

Voici le message d'Ea et le code:

par Ea le Mar 2 Oct 2012 - 16:41

Vous pourriez mettre un code comme ceci dans le javascript

Code: Sélectionner le contenu
$(function(){

if(!$('.idate').length) return;

var mois= ["vendémiaire", "frimaire", "nivôse", "pluviôse", "germinal", "floréal", "prairial", "messidor", "fructidor"];

var jours= ["lundi","mardi","vendredi","samedi", "dimanche"];

var seconde_par_vrai_seconde= 1;
var seconde_par_minute= 60;
var minute_par_heure= 60;
var heure_par_jour= 24;
var jour_par_mois= jours.length * 4;

// Nombre de seconde au bout duquel la date doit être mise à jour
var mise_a_jour= 1;

// date le 1er janvier 1970 à 00:00:00
var s_annee= 1970;
var s_mois= 0; // 0 est le premier mois de l'année
var s_jour= 0; // 0 est le premier jour du mois
var s_heure= 0;
var s_minute= 0;
var s_seconde= 0;
var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine

// décalage horaire par rapport à greenwitch ( 1 pour +1h )
var decalage= 0;

var last_date;

var update_time= function(){

var cur_date = Math.floor(Math.floor(+new Date()/1000) * seconde_par_vrai_seconde);
cur_date+= (decalage * seconde_par_minute * minute_par_heure);

if(last_date)
{
cur_date-= last_date;
last_date+= cur_date;
}
else
{
last_date= cur_date;
}

do
{
if(cur_date <= 0) break;
// Calcul secondes
var reste= cur_date % seconde_par_minute;
cur_date= ( cur_date - reste ) / seconde_par_minute;
s_seconde+= reste;
if(s_seconde >= seconde_par_minute)
{
s_seconde-= seconde_par_minute;
cur_date++;
}

if(cur_date <= 0) break;
// Calcul minutes
reste= cur_date % minute_par_heure;
cur_date= ( cur_date - reste ) / minute_par_heure;
s_minute+= reste;
if(s_minute >= minute_par_heure)
{
s_minute-= minute_par_heure;
cur_date++;
}

if(cur_date <= 0) break;
// Calcul heures
reste= cur_date % heure_par_jour;
cur_date= ( cur_date - reste ) / heure_par_jour;
s_heure+= reste;
if(s_heure >= heure_par_jour)
{
s_heure-= heure_par_jour;
cur_date++;
}

if(cur_date <= 0) break;
// Calcul jour de semaine
reste= cur_date % jours.length;
s_jour_de_semaine+= reste;
if(s_jour_de_semaine >= jours.length)
{
s_jour_de_semaine-= jours.length;
}

// Calcul jours du mois
reste= cur_date % jour_par_mois;
cur_date= ( cur_date - reste ) / jour_par_mois;
s_jour+= reste;
if(s_jour >= jour_par_mois)
{
s_jour-= jour_par_mois;
cur_date++;
}

if(cur_date <= 0) break;
// Calcul du mois
reste= cur_date % mois.length;
cur_date= ( cur_date - reste ) / mois.length;
s_mois+= reste;
if(s_mois >= mois.length)
{
s_mois-= mois.length;
cur_date++;
}

if(cur_date <= 0) break;
s_annee+= cur_date;
} while (0);

$('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);

};

update_time();

setInterval(update_time,1000 * mise_a_jour);

});

( dans PA > Divers > Gestion des codes javascript, et le mettre sur les pages où vous voulez afficher la date )

Et ensuite mettre sur la page :

Code: Sélectionner le contenu
<span class="idate"></span>

Une ou plusieurs fois où vous le souhaitez, à l'intérieur sera mis une date du style "lundi 16 prairial 2056 12:23:35".

Pour ce qui est des modifications :

Code: Sélectionner le contenu
var mois= ["vendémiaire", "frimaire", "nivôse", "pluviôse", "germinal", "floréal", "prairial", "messidor", "fructidor"];

C'est la liste des mois, il faut le faire sur le même format que cela ( par exemple pour nos mois à nous, ça serait :

Code: Sélectionner le contenu
var mois= ["janvier","février","mars","avril","mai","juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" ];



Code: Sélectionner le contenu
var jours= ["lundi","mardi","vendredi","samedi", "dimanche"];

Pareillement, ce sont les jours de la semaine.

Code: Sélectionner le contenu
var seconde_par_vrai_seconde= 1;

C'est le nombre de seconde par seconde, donc si par exemple on mettait deux, les secondes passeraient 2 fois plus vite dans le calendrier inventé.

Code: Sélectionner le contenu
var seconde_par_minute= 60;
var minute_par_heure= 60;
var heure_par_jour= 24;
var jour_par_mois= jours.length * 4;

cela me semble être clair, j'ai mis les chiffres normaux. pour nombre de jour par mois, j'ai mis 4 semaines ( le nombre de jour existants * 4 ).

Code: Sélectionner le contenu
// Nombre de seconde au bout duquel la date doit être mise à jour
var mise_a_jour= 1;

Si dans la ligne d'affichage on affiche pas les secondes, on pourrait mettre 60 par exemple ( pour ne pas faire 60 calculs inutiles ).

Code: Sélectionner le contenu
// date le 1er janvier 1970 à 00:00:00
var s_annee= 1970;
var s_mois= 0; // 0 est le premier mois de l'année
var s_jour= 0; // 0 est le premier jour du mois
var s_heure= 0;
var s_minute= 0;
var s_seconde= 0;

La date dans le calendrier inventé, du 1er janvier 1970 à minuit pile.

Code: Sélectionner le contenu
var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine

Le jour de la semaine de ce 1er janvier 1970 ( par exemple en mettant 1 ce serait le deuxième jour de la semaine, donc l'équivalent du mardi ).

Code: Sélectionner le contenu
// décalage horaire par rapport à greenwitch ( 1 pour +1h )
var decalage= 0;

Pour mettre des heures en plus ou en moins dans le calendrier inventé.


Puis pour finir, il y a cette ligne qui est le format de la date qu'on mettra :

Code: Sélectionner le contenu
$('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);


=> jours[s_jour_de_semaine] : c'est le jour en lettres
=> (s_jour+1) : c'est le numéro du jour ( pour facilité les calcules on utilise un premier jour 0, donc pour que le premier jour soit 1 à l'affichage on fait +1
=> mois[s_mois] : c'est le mois en lettre ( si on voulait afficher le numéro du mois on pourrait faire (s_mois+1) )
=> s_annee : l'année
=> s_heure : l'heure
=> s_minute : la minute
=> s_seconde : la seconde

Donc en modifiant tout ces paramètres on devrait pouvoir faire pas mal de chose ( mais les mois doivent avoir le même nombre de jour, le changement d'heure doit se faire à la main et pas d'année bissextile ).

Cordialement.


Je ne comprends pas cette partie et ce que je dois changer dedans:

Code: Sélectionner le contenu
// date le 1er janvier 1970 à 00:00:00
var s_annee= 1970;
var s_mois= 0; // 0 est le premier mois de l'année
var s_jour= 0; // 0 est le premier jour du mois
var s_heure= 0;
var s_minute= 0;
var s_seconde= 0;

La date dans le calendrier inventé, du 1er janvier 1970 à minuit pile.

Code: Sélectionner le contenu
var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine

Le jour de la semaine de ce 1er janvier 1970 ( par exemple en mettant 1 ce serait le deuxième jour de la semaine, donc l'équivalent du mardi ).



Puis pour finir, il y a cette ligne qui est le format de la date qu'on mettra :

Code: Sélectionner le contenu
$('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);


=> jours[s_jour_de_semaine] : c'est le jour en lettres
=> (s_jour+1) : c'est le numéro du jour ( pour facilité les calcules on utilise un premier jour 0, donc pour que le premier jour soit 1 à l'affichage on fait +1
=> mois[s_mois] : c'est le mois en lettre ( si on voulait afficher le numéro du mois on pourrait faire (s_mois+1) )
=> s_annee : l'année
=> s_heure : l'heure
=> s_minute : la minute
=> s_seconde : la seconde


Merci si vous trouvez la réponse à mon problème ! Smile

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Chacha le Mer 17 Oct 2012 - 20:03

le topic a été fermé et verrouillé donc je ne peux pas poser mes questions dedans.
Bonsoir,

Le sujet archivé est replacé et votre message fusionné avec le sujet initial.


Cordiale.


Règles Générales du Forum - Le Staff de ForumActif
Questions & Réponses Fréquentes - Trucs & Astuces
Outils Fondateurs - Perte de Mot de Passe

Chacha
Modéractif
Modéractif

Masculin
Messages : 50925
Inscrit(e) le : 21/08/2010

http://forum.forumactif.com/
Chacha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Mer 17 Oct 2012 - 21:44

J'ai mis une phrase pour expliquer chaque partie, vous ne comprenez aucune des phrases ?

Et il n'y a rien à changer, si vous le souhaitez vous pouvez changer quelque chose mais ce n'est pas nécessaire.

Par exemple si vous voulez qu'en 1970 de notre calendrier, on soit l'année 5487 du calendrier imaginaire, il faut remplacer :

Code:
var s_annee= 1970;
Par :

Code:
var s_annee= 5487;
( donc si vous voulez qu'on soit en 2012 dans le calendrier imaginaire à la vrai année 2012, il faut modifier le s_annee pour y arriver ( si l'année dure 2 fois moins de temps, ça devrait être quelque chose aux alentours de 1991 ) )

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Lun 22 Oct 2012 - 0:57

En fait j'ai réussi à avoir l'année mais pour mes jours et mes mois c'est chaotique, ça correspond pas du tout et je ne comprends pas pourquoi, j'ai fait tout ce qui était indiqué pourtant!

Si je veux avoir cette date: Kenat 8 Troisième cyclum 430

Kenat est le nom du jour, 8 est le numéro du jour dans mon mois, Troisième cyclum est mon mois, et 430 mon année.
Qu'est-ce que je dois modifier? Car en suivant les instructions à la lettre ça n'as pas marché. Le codage n'est pas une évidence pour moi, pourtant je ne suis pas stupide.

Code:
Code: Sélectionner le contenu
$('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);


=> jours[s_jour_de_semaine] : c'est le jour en lettres
=> (s_jour+1) : c'est le numéro du jour ( pour facilité les calcules on utilise un premier jour 0, donc pour que le premier jour soit 1 à l'affichage on fait +1
=> mois[s_mois] : c'est le mois en lettre ( si on voulait afficher le numéro du mois on pourrait faire (s_mois+1) )
=> s_annee : l'année
=> s_heure : l'heure
=> s_minute : la minute
=> s_seconde : la seconde

Je n'ai pas compris ce que je devais modifier à ça.
Et je n'ai pas compris comment modifier ça:

Code:
Code: Sélectionner le contenu
// date le 1er janvier 1970 à 00:00:00
var s_annee= 1970;
var s_mois= 0; // 0 est le premier mois de l'année
var s_jour= 0; // 0 est le premier jour du mois
var s_heure= 0;
var s_minute= 0;
var s_seconde= 0;

La date dans le calendrier inventé, du 1er janvier 1970 à minuit pile.

Donc peut-être qu'en me disant simplement ce que je dois changer si je veux obtenir cette première date ça sera plus simple pour moi de comprendre. Peut-être n'est-ce pas possible si on ne commence pas de zéro? Je ne sais pas, en tout cas il y avait des choses pas vraiment claires dans cette explication pour moi Sad

De plus, lorsque je n'entre aucunes précison à part l'année, la date n'est pas bonne! car il n'y a pas de Kenat 10 Troisième cyclum dans mon calendrier, le 10 est un Cilem.
Bref. Qu'est-ce que j'ai mal fait? Sad

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Sam 27 Oct 2012 - 14:48

Petit up car mon forum a une semaine et la date n'est toujours pas bonne...

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Dim 28 Oct 2012 - 0:16

si les années vont 2 fois plus vite, pour qu'en 2012 on soit en 430 du calendrier inventé, il faut qu'en 1970 on soit vers l'année 346 du calendrier inventé

pour ce faire il faut changer la ligne :

Code:
var s_annee= 1970;
en :

Code:
var s_annee= 346;
avec ce changement, on dit " en 1970 de notre calendier, on est en l'année 346 du calendrier inventé )

éventuellement il faudrait mettre une année à quelques unités près de ça ( j'ai calculé en vitesse et ça ne prend pas compte d'autres facteurs ).


une fois l'année réglée, pour régler le mois on peut changer :

Code:
var s_mois= 0; // 0 est le premier mois de l'année

si par exemple on veut qu'on soit deux mois plus tard dans le calendrier inventé, on met :

Code:
var s_mois= 2; // 0 est le premier mois de l'année

ensuite pareille pour le jour du mois, modifier :

Code:
var s_jour= 0; // 0 est le premier jour du mois
si vous voulez 5 jours de plus dans le calendrier inventé vous modifierez en :

Code:
var s_jour= 5; // 0 est le premier jour du mois

pareille pour heure, seconde et minute mais ça c'est moins utile ( à part si vous voudriez avoir une heure différente de l'actuelle )

ensuite pour ce qui est de quel jour de la semaine on est, pour le régler il faut changer le :

Code:
var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Dim 28 Oct 2012 - 21:24

J'avais compris ça, mais malheureusement ça ne veut pas marcher.

J'ai mis l'année 346 pour avoir 430 et j'ai obtenu 502.
J'ai mis le troisième mois et j'ai obtenu le huitième.
J'ai mis le 18ème jour et j'ai obtenu le 3ème.

J'ai déjà fait ça différentes fois, il n'y a même pas de proportionnalité. Donc ce n'est vraiment plus un problème de compréhension. Quelque chose cloche dans mon calendrier et je ne sais pas ce que c'est.

Voici mon calendrier tel qu'il est et devrait être pour chaque année.



Et voici mon code entier:

Code:
$(function(){
 
    if(!$('.idate').length) return;
 
    var mois= ["", "Premier cyclum", "Deuxième cyclum", "Troisième cyclum", "Quatrième cyclum", "Cinquième cyclum", "Sixième cyclum", "Septième cyclum", "Huitième cyclum", "Dernier cyclum"];
 
    var jours= ["Levo","Kenat","Ronen","Sevan", "Cilem"];
 
    var seconde_par_vrai_seconde= 2;
    var seconde_par_minute= 60;
    var minute_par_heure= 60;
    var heure_par_jour= 24;
    var jour_par_mois= jours.length * 4;
 
    // Nombre de seconde au bout duquel la date doit être mise à jour
    var mise_a_jour= 60;
 
    // date le 1er janvier 1970 à 00:00:00
    var s_annee= 346;
    var s_mois= 3; // 0 est le premier mois de l'année
    var s_jour= 18; // 0 est le premier jour du mois
    var s_heure= 20;
    var s_minute= 15;
    var s_seconde= 0;
    var s_jour_de_semaine= 2; // 0 est le premier jour de la semaine
 
    // décalage horaire par rapport à greenwitch ( 1 pour +1h )
    var decalage= 0;
 
    var last_date;
 
    var update_time= function(){
 
        var cur_date = Math.floor(Math.floor(+new Date()/1000) * seconde_par_vrai_seconde);
        cur_date+= (decalage * seconde_par_minute * minute_par_heure);
   
        if(last_date)
        {
            cur_date-= last_date;
            last_date+= cur_date;
        }
        else
        {
            last_date= cur_date;
        }
 
        do
        {
            if(cur_date <= 0) break;
            // Calcul secondes
            var reste= cur_date % seconde_par_minute;
            cur_date= ( cur_date - reste ) / seconde_par_minute;
            s_seconde+= reste;
            if(s_seconde >= seconde_par_minute)
            {
                s_seconde-= seconde_par_minute;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul minutes
            reste= cur_date % minute_par_heure;
            cur_date= ( cur_date - reste ) / minute_par_heure;
            s_minute+= reste;
            if(s_minute >= minute_par_heure)
            {
                s_minute-= minute_par_heure;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul heures
            reste= cur_date % heure_par_jour;
            cur_date= ( cur_date - reste ) / heure_par_jour;
            s_heure+= reste;
            if(s_heure >= heure_par_jour)
            {
                s_heure-= heure_par_jour;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul jour de semaine
            reste= cur_date % jours.length;
            s_jour_de_semaine+= reste;
            if(s_jour_de_semaine >= jours.length)
            {
                s_jour_de_semaine-= jours.length;
            }
 
            // Calcul jours du mois
            reste= cur_date % jour_par_mois;
            cur_date= ( cur_date - reste ) / jour_par_mois;
            s_jour+= reste;
            if(s_jour >= jour_par_mois)
            {
                s_jour-= jour_par_mois;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul du mois
            reste= cur_date % mois.length;
            cur_date= ( cur_date - reste ) / mois.length;
            s_mois+= reste;
            if(s_mois >= mois.length)
            {
                s_mois-= mois.length;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            s_annee+= cur_date;
        } while (0);
 
        $('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);
 
    };
 
    update_time();
 
    setInterval(update_time,1000 * mise_a_jour);
 
});


Je ne comprends pas d'où vient mon problème...

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Dim 28 Oct 2012 - 22:21

j'ai repris votre script et j'ai :

- retiré le "" au début de var mois, ça ajoutait un mois ( donc il y avait 10 mois en tout ) avec un nom vide

- changé var seconde_par_vrai_seconde= 2; en var seconde_par_vrai_seconde= 1;, mettre 2 signifiait qu'à chaque seconde du calendrier réel, 2 secondes du calendrier imaginaire passait ( donc ça doublait encore la vitesse du temps dans le calendrier imaginaire )

- ensuite j'ai réglé s_annee, s_mois, s_jour et s_jour_de_semaine ( par test et modification ) pour qu'on soit le "Kenat 8 Troisième cyclum 430"

- puis pour finir j'ai mis s_heure, s_minute et s_seconde à 0 et decalage à 1 ( pour avoir la même heure qu'au calendrier réel )

et donc à ce moment avec ce script là :

Code:
$(function(){
 
    if(!$('.idate').length) return;
 
    var mois= ["Premier cyclum", "Deuxième cyclum", "Troisième cyclum", "Quatrième cyclum", "Cinquième cyclum", "Sixième cyclum", "Septième cyclum", "Huitième cyclum", "Dernier cyclum"];
 
    var jours= ["Levo","Kenat","Ronen","Sevan", "Cilem"];
 
    var seconde_par_vrai_seconde= 1;
    var seconde_par_minute= 60;
    var minute_par_heure= 60;
    var heure_par_jour= 24;
    var jour_par_mois= jours.length * 4;
 
    // Nombre de seconde au bout duquel la date doit être mise à jour
    var mise_a_jour= 1;
 
    // date le 1er janvier 1970 à 00:00:00
    var s_annee= 343;
    var s_mois= 3; // 0 est le premier mois de l'année
    var s_jour= 6; // 0 est le premier jour du mois
    var s_heure= 0;
    var s_minute= 0;
    var s_seconde= 0;
    var s_jour_de_semaine= 0; // 0 est le premier jour de la semaine
 
    // décalage horaire par rapport à greenwitch ( 1 pour +1h )
    var decalage= 1;
 
    var last_date;
 
    var update_time= function(){
 
        var cur_date = Math.floor(Math.floor(+new Date()/1000) * seconde_par_vrai_seconde);
        cur_date+= (decalage * seconde_par_minute * minute_par_heure);
 
        if(last_date)
        {
            cur_date-= last_date;
            last_date+= cur_date;
        }
        else
        {
            last_date= cur_date;
        }
 
        do
        {
            if(cur_date <= 0) break;
            // Calcul secondes
            var reste= cur_date % seconde_par_minute;
            cur_date= ( cur_date - reste ) / seconde_par_minute;
            s_seconde+= reste;
            if(s_seconde >= seconde_par_minute)
            {
                s_seconde-= seconde_par_minute;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul minutes
            reste= cur_date % minute_par_heure;
            cur_date= ( cur_date - reste ) / minute_par_heure;
            s_minute+= reste;
            if(s_minute >= minute_par_heure)
            {
                s_minute-= minute_par_heure;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul heures
            reste= cur_date % heure_par_jour;
            cur_date= ( cur_date - reste ) / heure_par_jour;
            s_heure+= reste;
            if(s_heure >= heure_par_jour)
            {
                s_heure-= heure_par_jour;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul jour de semaine
            reste= cur_date % jours.length;
            s_jour_de_semaine+= reste;
            if(s_jour_de_semaine >= jours.length)
            {
                s_jour_de_semaine-= jours.length;
            }
 
            // Calcul jours du mois
            reste= cur_date % jour_par_mois;
            cur_date= ( cur_date - reste ) / jour_par_mois;
            s_jour+= reste;
            if(s_jour >= jour_par_mois)
            {
                s_jour-= jour_par_mois;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            // Calcul du mois
            reste= cur_date % mois.length;
            cur_date= ( cur_date - reste ) / mois.length;
            s_mois+= reste;
            if(s_mois >= mois.length)
            {
                s_mois-= mois.length;
                cur_date++;
            }
 
            if(cur_date <= 0) break;
            s_annee+= cur_date;
        } while (0);
 
        $('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);
 
    };
 
    update_time();
 
    setInterval(update_time,1000 * mise_a_jour);
 
});
On a la date :

Code:
Kenat 8 Troisième cyclum 430 22:21:16

donc pour en revenir au post précédent :

@Eyeha a écrit:J'ai mis l'année 346 pour avoir 430 et j'ai obtenu 502.
c'était probablement du au mois en trop, et aux 2 secondes imaginaires qui prennent le temps d'une seconde calendrier réel ( donc le temps passait 2 fois plus vite )

@Eyeha a écrit:J'ai mis le troisième mois et j'ai obtenu le huitième.
J'ai mis le 18ème jour et j'ai obtenu le 3ème.
pour ceci c'est normal, le calendrier réel et imaginaire ont une base et un défilement différent. on pouvait approximer pour les années mais pour les jours et les mois ça va plus vite de juste trouver le bon par essais successifs

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Mar 30 Oct 2012 - 23:50

Je vais essayer ça alors. Je fermerais le topic quand je l'aurais mis en place. Si j'ai des questions je les mettrais après, sinon je pourrais clore.

Merci beaucoup Ea pour ton aide! J'essaie ça demain, il est tard ici ! Smile

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Eyeha le Mer 31 Oct 2012 - 14:32

Bon effectivement il y a encore un souci mais cette fois c'est de ma faute.

Je suis désolée, je devais être fatiguée mais il n'y a pas de Kenat 8, que des Kenat 7 donc forcément quand j'ai mis le code je me suis retrouvée avec un jour en plus. (Cilem 11 au lieu de Cilem 10)

Je comprends ce qui ne va pas mais je ne sais pas où je dois le changer.
Encore désolée pour mon erreur.

EDIT: J'ai trouvé !! Fallait enlever le +1 à la fin pour s_jour!
Merci encore pour tout, maintenant j'ai compris comment ça marchait en plus d'avoir un joli code!

Heureusement que vous êtes là pour nous aider! Merci merci !!!

Eyeha
**

Messages : 51
Inscrit(e) le : 13/03/2012

http://eleris.pureforum.net/
Eyeha a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Coder un calendrier inventé

Message par Ea le Jeu 1 Nov 2012 - 8:16

Si vous avez enlevé le +1 là :

Code:
 $('.idate').text(jours[s_jour_de_semaine]+' '+(s_jour+1)+' '+mois[s_mois]+' '+s_annee+' '+s_heure+':'+s_minute+':'+s_seconde);
il va y avoir les jours 0 à 19 affichés ( pour le comptage c'est plus simple de compter les jours 0 à 19, donc dans les calculs s_jour est de 0 à 19, mais à l'affichage on ajoute +1 pour avoir affiché les jours 1 à 20 )


il y à plusieurs manière de le faire mieux

donc pour rappeler, on a un jour du calendrier réel :

1er janvier 1970
et afin de régler tout les jours du calendrier imaginaire par rapport au calendrier réel, on indique à quel jour du calendrier imaginaire ça correspond

voilà plusieurs façons de régler le problème du jour de semaine différent

  1. tout d'abord avec ce que j'ai mis en haut, le 1er janvier 1970 correspond au 4ème cyclum ( var s_mois= 3; ) 7ème jour ( var s_jour= 6; ) levo ( var s_jour_de_semaine= 0; )

    si on regarde https://i44.servimg.com/u/f44/11/14/26/94/calend10.png le 7ème jour d'un mois cela correspond à un kenat plutôt

    il suffit donc de changer :

    Code:
     var s_jour_de_semaine= 0;
    qui est un levo en 1 qui est un kenat :

    Code:
     var s_jour_de_semaine= 1;
    ainsi le jour du calendrier imaginaire qui correspond au 1er janvier 1970 est un kenat 7 du quatrième cyclum 343 ( et tout le reste du calendrier ( donc aujourd'hui également ) est donc en phase avec les jours de la semaine )


  2. On pourrait aussi juste retirer un jour, si on change :

    Code:
    var s_jour= 6;
    en :

    Code:
    var s_jour= 5;

    on a donc que le 1er janvier 1970 correspond au 4ème cyclum ( var s_mois= 3; ) 6ème jour ( var s_jour= 5; ) levo ( var s_jour_de_semaine= 0; ) ce qui est bien en phase avec https://i44.servimg.com/u/f44/11/14/26/94/calend10.png ( donc les jours de la semaine sont en phase et le reste du calendrier également )

  3. On pourrait également ajouter un jour en changeant :

    Code:
    var s_jour= 6;
    en :

    Code:
    var s_jour= 7;
    on a donc que le 1er janvier 1970 correspond au 4ème cyclum ( var s_mois= 3; ) 8ème jour ( var s_jour= 8; ) levo ( var s_jour_de_semaine= 0; )

    d'après https://i44.servimg.com/u/f44/11/14/26/94/calend10.png le 8ème jour c'est un ronen et donc il faut encore changer levo :

    Code:
    var s_jour_de_semaine= 0;
    en ronen :

    Code:
    var s_jour_de_semaine= 2;
    et les jours du calendrier imaginaire sont en phase


  4. on pourrait ajouter retirer le nombre d'année / mois / jours qu'on veut tout ce qui compte c'est qu'une fois fait, on regarde à quel s_jour on est ( si on est un s_jour 7 on est un 8, si on est un s_jour 0 on est un 1, si on est un s_jour 19 on est un 20 ) et mettre s_jour_de_semaine en conséquence ( 0 pour Levo, 1 pour Kenat, 2 pour Ronen, 3 pour Sevan et 4 pour Cilem )

Ea
Aidactif
Aidactif

Messages : 23442
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum