Bonjour à tous,
j'ai essayé de trouver une fonction javascript pour calculer la date du dernier dimanche d'un mois donné. j'ai bien trouvé quelque chose mais je n'arrive pas à m'en servir. Est ce que vous pourriez m'indiquer ce qui cloche.
D'avance merci
<script language="javascript">
function dDimanche(year,month) {
var dimanche;
var dateTest;
for( var i=nbjourmois(year,month); i > 0; i-- ){
dateTest = new Date(year, month, i);
if( dateTest.getDay() == 0 ) {
dimanche = dateTest;
break;
}
}
return dimanche;
}
valeur_1, valeur_2 ce sont les paramètres que l'on "passe" à la fonction
var toto= fera que ce que renvoie cette fonction ira dans toto
mais on peut faire "bien sûr" : if ( nom( valeur_1, valeur_2... ) ... ) .... ou autre
on fait directement un test sur ce que retourne la fonction
fonction nom( paramètre_1, paramètre_2, ... )
{ on traite paramètre_1, paramètre_2....
( qui seront ici, égal à valeur_1, valeur_2... de l'appel )
return "résultat de la fonction";
( donc toto sera = à "résultat de la fonction"
derrière l'appel )
}
c'est "quasi" la même choses avec tous les langages
remarque, la boucle pour trouver le dernier dimanche est probablement inutile on peut obtenir le n° de jour dans la semaine ( de 0 dimanche à 6 samedi )
dernier jour du mois - le n° de jour dans la semaine de ce dernier jour = dernier dimanche
dDimanche(dateNow.getYear(),2);
c'est quoi dateNow ?
document.write(dimanche);
c'est quoi dimanche ? il y a bien une variable dimanche
définie. dans la fonction dDimanche, donc locale à cette fonction
compte le nombre de { et de } dans la fonction nbjourmois
return nbjour;
document.write(nbjour); ne sera jamais exécuté
attention à document.write, s'il est utilisé lorsque la page
a été totalement interprétée ( cas d'une function appelée sur
un évênement par exemple ), ça efface toute la page, y compris
le javascript
après...( s'il n'y a pas d'autres erreurs de syntaxe déjà )
reste à contrôler les résultats !
Merci de te pencher sur mon probleme (enfin c'est surtout moi le probleme ;) )
apres correction des erreurs que tu as soulevées, je n'ai toujours rien du tout en retour.
il y a quelque chose que je pense ne pas saisir, c'est l'utilisation de "return"
function dDimanche(year,month) {
var dateTest;
for( var i=nbjourmois(year,month); i > 0; i-- ){
dateTest = new Date(year, month, i);
if( dateTest.getDay() == 0 ) {
dimanche = dateTest;
break;
}
}
return dimanche;
}
Moi ce que je n'arrive pas a comprendre ni a voir, c'est est déclaré la variable dimanche, parce qu'on dirai que tu l'utilise sans la déclarer avec le mot clée "var" !
a++
Si la réponse vous convient, pensez : Réponse acceptée !
en dehors des fonctions.
Dans la fonction dDimanche elle est censée prendre la valeur de dateTest, et avec "return dimanche" je voulais recuperer le resultat mais j'ai un joli undifined qui apparait.
quand on met au point il faut faire du "débugging"
<!-- pour validation w3c ok ;o)) -->----
Chrome
, contrôler page actuelle / Options pour développeurs
/ Console Javascript, ----
FireFox
, Outils / Console d'erreurs
et mieux : télécharger mon Site][M'écrire]
Bonjour,
en accord avec ce qui précéde je
rajouterais que...
<table bgcolor= "#e6effe" border="0" cellpadding="5" cellspacing="0" width="100%">----, sinon... est-ce qu'à tous les coups, ta
fonction
nbjourmois retourne ce qu'il faut quand il faut et
toujours
?</td>
</td></tr></tbody></table>
Dans ta
fonction nbjourmois regarde
à quel niveau tu as placé ton return
Si je ne m'abuse il est dans la condition
if( nbjour == -1 )
en d'autres termes tu
auras un résultat différent de undefined SI et
SEULEMENT SI tu demandes le nombre de jours du mois de février et qui plus est
d'une année non bisextile UNIQUEMENT
Un code bien indenté permet souvent
de voir la coquille, cela se joue à un q prés...
;O)
Bonjour,
bon j'ai fini par reussir a la faire tourner, mais bcp de chose m'echappe encore.
cette fonction vous aurez bien compris que ce n'est pas moi qui l'ai ecrite aussi il y a des choses que je ne comprends pas. la voila en entier qui fonctionne :
<script language="javascript">
function inDST(dateNow) {
var dmar;
var doct;
var dateTest;
var dimanche;
var dateTest;
//-- boucle
du dernier jour du mois au premier, en ordre decroissant
for(
var i = nbjourmois ( year, month); i >
0; i-- ) {
//-- Init date pour recuperation de
l'indice du jour
dateTest = new Date( year, month, i);
A propos du dernier jour, si j'ai bien compris, ta methode ne peut fonctionner que pour le dimanche (0) puisqu'il debute la semaine. dans tous les autres cas il est necessaire de faire cette boucle puisque la fin de la semaine peut etre au dela du dernier jour du mois. c'est bien ca ?
>>ta methode ne peut fonctionner que pour le dimanche (0)
ben non !
exemple :
dernier jour du mois d'octobre 2008 : vendredi, soit le 5ème jour de la semaine
31/10/2008 - 5 = 26/10/2008 le dernier dimanche quoi
la gestion des dates est top (?) en js, y'a tout (?) ce qu'il faut
tous les langages ne permettent pas de faire
date + ou - une valeur = nouvelle date
faut parfois se le "faire à la main", et là, une boucle
ferait probablement l'affaire.
Merci beaucoup, avec ta méthode j'arrive à ça, qui fonctionne parfaitement, avec en plus la satisfaction de l'avoir fait moi meme... Ca doit surement pouvoir se simplifier avec d'autres choses que j'ignore....
<script language="javascript">
var jour=new Date();
var annee=jour.getFullYear();
var dmar=new Date(annee,2,31) ;
var doct=new Date(annee,9,31) ;
var mar;
var dnmar=dmar.getDay();
if (dnmar==0) {
mar=dmar;
}
else {
var nmar=31-dnmar;
mar=new Date(annee,2,nmar);
}
var oct;
var dnoct=doct.getDay();
if (dnoct==0) {
oct=doct;
}
else {
var noct=31-dnoct;
oct=new Date(annee,9,noct);
}
if (jour.getTime()-mar.getTime()>0 && jour.getTime()-oct.getTime()<0) {
alert("été");
}
else {
alert("hiver");
}
le ch'tiot 31 : dans njour=31-nbj;
pas toujours 31 jours le mois...
si tu réutilisais la fonction pour autre chose que l'heure d'été/hiver !
pour ici effectivement c'est ok.
je n'aurais pas testé le cas nbjour=0
puisque valeur-0=valeur, alors...
mais bon... chacun fait comme il le sent là
et je ne sais pas si ce serait plus mieux...