Probleme sur calendrier !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme sur calendrier !

Re: Probleme sur calendrier !

par Calimero » 30 janv. 2012, 17:51

bonjour

j'ai le même problème avec le même script. si quelqu'un a une idée , je suis aussi preneur

merci d'avance
Ce genre de bug est bien dur à régler (faut bien rentrer dans l'algo du calendrier, puis prendre le temps de tester pour ne provoquer aucun nouveau bug). Autrement dit tu auras plus vite fait de trouver une alternative que d'attendre la correction.

Re: Probleme sur calendrier !

par gandhyx » 30 janv. 2012, 17:43

bonjour

j'ai le même problème avec le même script. si quelqu'un a une idée , je suis aussi preneur

merci d'avance

par joss91 » 31 janv. 2008, 16:56

// Set the initial date.
	var ds_i_date = new Date();
	ds_c_month = ds_i_date.getMonth() + 1;
	ds_c_year = ds_i_date.getFullYear();

	// Get Element By Id
	function ds_getel(id) {
		return document.getElementById(id);
	}

	// Get the left and the top of the element.
	function ds_getleft(el) {
		var tmp = el.offsetLeft;
		el = el.offsetParent
		while(el) {
			tmp += el.offsetLeft;
			el = el.offsetParent;
		}
		return tmp;
	}
	function ds_gettop(el) {
		var tmp = el.offsetTop;
		el = el.offsetParent
		while(el) {
			tmp += el.offsetTop;
			el = el.offsetParent;
		}
		return tmp;
	}

	// Output Element
	var ds_oe = ds_getel('ds_calclass');
	// Container
	var ds_ce = ds_getel('ds_conclass');

	// Output Buffering
	var ds_ob = ''; 
	function ds_ob_clean() {
		ds_ob = '';
	}
	function ds_ob_flush() {
		ds_oe.innerHTML = ds_ob;
		ds_ob_clean();
	}
	function ds_echo(t) {
		ds_ob += t;
	}

	var ds_element; // Text Element...

	var ds_monthnames = [
	'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
	'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'
	]; // You can translate it for your language.

	var ds_daynames = [
	'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'
	]; // You can translate it for your language.

	// Calendar template
	function ds_template_main_above(t) {
		return '<table cellpadding="3" cellspacing="1" class="ds_tbl">'
			 + '<tr>'
			 + '<td class="ds_head" style="cursor: pointer" onclick="ds_py();"><<</td>'
			 + '<td class="ds_head" style="cursor: pointer" onclick="ds_pm();"><</td>'
			 + '<td class="ds_head" style="cursor: pointer; color:red;" onclick="ds_hi();" colspan="3">- Fermer -</td>'
			 + '<td class="ds_head" style="cursor: pointer" onclick="ds_nm();">></td>'
			 + '<td class="ds_head" style="cursor: pointer" onclick="ds_ny();">>></td>'
			 + '</tr>'
			 + '<tr>'
			 + '<td colspan="7" class="ds_head">' + t + '</td>'
			 + '</tr>'
			 + '<tr>';
	}

	function ds_template_day_row(t) {
		return '<td class="ds_subhead">' + t + '</td>';
		// Define width in CSS, XHTML 1.0 Strict doesn't have width property for it.
	}

	function ds_template_new_week() {
		return '</tr><tr>';
	}

	function ds_template_blank_cell(colspan) {
		return '<td colspan="' + colspan + '"></td>'
	}

	function ds_template_day(jour_sem, d, m, y) {
		var today = new Date;
		var num = today.getDate();
		var mois = today.getMonth();
		var annee = today.getFullYear();
		mois = mois + 1;
		
		if ( (d == num)&&(m == mois)&&(y == annee) ) 
			return '<td class="ds_cell_today" onclick="ds_onclick(' + jour_sem + ',' + d + ',' + m + ',' + y + ')">' + d + '</td>'; // Jour actuel !
		//else if (y < annee) return '<td class="ds_cell_past">' + d + '</td>'; //Année passée
		//else if (m < mois) return '<td class="ds_cell_past">' + d + '</td>'; //Année actuelle, mois passé
		else if (d < num && (m == mois) && (y == annee) ) return '<td class="ds_cell_past">' + d + '</td>'; // Année actuelle, mois actuel, jour passé
		else return '<td class="ds_cell" onclick="ds_onclick(' + jour_sem + ',' + d + ',' + m + ',' + y + ')">' + d + '</td>'; // Jour futur...
	}

	function ds_template_main_below() {
		return '</tr>'
			 + '</table>';
	}

	// This one draws calendar...
	function ds_draw_calendar(m, y) {
		// First clean the output buffer.
		ds_ob_clean();
		// Here we go, do the header
		ds_echo (ds_template_main_above(ds_monthnames[m - 1] + ' ' + y));
		for (i = 0; i < 7; i ++) {
			ds_echo (ds_template_day_row(ds_daynames[i]));
		}
		// Make a date object.
		var ds_dc_date = new Date();
		ds_dc_date.setMonth(m - 1);
		ds_dc_date.setFullYear(y);
		ds_dc_date.setDate(1);
		if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) {
			days = 31;
		} else if (m == 4 || m == 6 || m == 9 || m == 11) {
			days = 30;
		} else {
			days = (y % 4 == 0) ? 29 : 28;
		}
		var first_day = ds_dc_date.getDay();
		var first_loop = 1;
		// Start the first week
		ds_echo (ds_template_new_week());
		// If sunday is not the first day of the month, make a blank cell...
		if (first_day != 0) {
			ds_echo (ds_template_blank_cell(first_day));
		}
		var j = first_day;
		for (i = 0; i < days; i ++) {
			// Today is sunday, make a new week.
			// If this sunday is the first day of the month,
			// we've made a new row for you already.
			if (j == 0 && !first_loop) {
				// New week!!
				ds_echo (ds_template_new_week());
			}
			// Make a row of that day!
			ds_echo (ds_template_day(j, i + 1, m, y));
			// This is not first loop anymore...
			first_loop = 0;
			// What is the next day?
			j ++;
			j %= 7;
		}
		// Do the footer
		ds_echo (ds_template_main_below());
		// And let's display..
		ds_ob_flush();
		// Scroll it into view.
		ds_ce.scrollIntoView();
	}

	// A function to show the calendar.
	// When user click on the date, it will set the content of t.
	function ds_sh(t) {
		// Set the element to set...
		ds_element = t;
		// Make a new date, and set the current month and year.
		var ds_sh_date = new Date();
		ds_c_month = ds_sh_date.getMonth() + 1;
		ds_c_year = ds_sh_date.getFullYear();
		// Draw the calendar
		ds_draw_calendar(ds_c_month, ds_c_year);
		// To change the position properly, we must show it first.
		ds_ce.style.display = '';
		// Move the calendar container!
		the_left = ds_getleft(t);
		the_top = ds_gettop(t) + t.offsetHeight;
		ds_ce.style.left = the_left + 'px';
		ds_ce.style.top = the_top + 'px';
		// Scroll it into view.
		ds_ce.scrollIntoView();
	}

	// Hide the calendar.
	function ds_hi() {
		ds_ce.style.display = 'none';
	}

	// Moves to the next month...
	function ds_nm() {
		// Increase the current month.
		ds_c_month ++;
		// We have passed December, let's go to the next year.
		// Increase the current year, and set the current month to January.
		if (ds_c_month > 12) {
			ds_c_month = 1; 
			ds_c_year++;
		}
		// Redraw the calendar.
		ds_draw_calendar(ds_c_month, ds_c_year);
	}

	// Moves to the previous month...
	function ds_pm() {
		ds_i_date = new Date();
		ds_i_month = ds_i_date.getMonth() + 1;
		ds_i_year = ds_i_date.getFullYear();		
		
		if ( (ds_c_year > ds_i_year) || ( (ds_c_year == ds_i_year) && (ds_c_month > ds_i_month) ) ) // On ne peut revenir en arrière que si on est dans le futur. On ne prend pas de dates passées.
		{
			ds_c_month = ds_c_month - 1; // Can't use dash-dash here, it will make the page invalid.
			// We have passed January, let's go back to the previous year.
			// Decrease the current year, and set the current month to December.
			if (ds_c_month < 1) {
				ds_c_month = 12; 
				ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
			}
			// Redraw the calendar.
			ds_draw_calendar(ds_c_month, ds_c_year);
		}
	}

	// Moves to the next year...
	function ds_ny() {
		// Increase the current year.
		ds_c_year++;
		// Redraw the calendar.
		ds_draw_calendar(ds_c_month, ds_c_year);
	}

	// Moves to the previous year...
	function ds_py() {
		ds_i_date = new Date();
		ds_i_month = ds_i_date.getMonth() + 1;
		ds_i_year = ds_i_date.getFullYear();				
		
		if (ds_c_year > ds_i_year) // On ne peut revenir en arrière que si on est dans le futur. On ne prend pas de dates passées.
		{
			// Decrease the current year.
			ds_c_year = ds_c_year - 1; // Can't use dash-dash here, it will make the page invalid.
			// Redraw the calendar.
			if ((ds_c_year = ds_i_year) && (ds_c_month < ds_i_month)) ds_draw_calendar(ds_i_month, ds_c_year);
			else ds_draw_calendar(ds_c_month, ds_c_year);
		}
		else
		{
			ds_c_month = ds_i_month;
			ds_c_year = ds_i_year;
			ds_draw_calendar(ds_c_month, ds_c_year);
		}
	}

	// Format the date to output.
	function ds_format_date(jour_sem, d, m, y) {
		// 2 digits month.
		m2 = '00' + m;
		m2 = m2.substr(m2.length - 2);
		// 2 digits day.
		d2 = '00' + d;
		d2 = d2.substr(d2.length - 2);
		// DD MM YYYY
		if (m2 == '01') mois = 'Janvier';
		if (m2 == '02') mois = 'Février';
		if (m2 == '03') mois = 'Mars';
		if (m2 == '04') mois = 'Avril';
		if (m2 == '05') mois = 'Mai';
		if (m2 == '06') mois = 'Juin';
		if (m2 == '07') mois = 'Juillet';
		if (m2 == '08') mois = 'Août';
		if (m2 == '09') mois = 'Septembre';
		if (m2 == '10') mois = 'Octobre';
		if (m2 == '11') mois = 'Novembre';
		if (m2 == '12') mois = 'Décembre';

		if (jour_sem == '1') full_jour = 'Lundi';
		if (jour_sem == '2') full_jour = 'Mardi';
		if (jour_sem == '3') full_jour = 'Mercredi';
		if (jour_sem == '4') full_jour = 'Jeudi';
		if (jour_sem == '5') full_jour = 'Vendredi';
		if (jour_sem == '6') full_jour = 'Samedi';
		if (jour_sem == '0') full_jour = 'Dimanche';
		
		ds_getel('date_week_day').value = jour_sem;
		ds_getel('date_day').value = d;
		ds_getel('date_month').value = m;
		ds_getel('date_year').value = y;
		
		return full_jour + ' ' + d2 + ' ' + mois + ' ' + y;
	}

	// When the user clicks the day.
	function ds_onclick(jour_sem, d, m, y) {
		ds_i_date = new Date();
		ds_i_month = ds_i_date.getMonth() + 1;
		ds_i_year = ds_i_date.getFullYear();				
		
		if (((y == ds_i_year) && (m > ds_i_month + 2)) || ((y > ds_i_year) && (m > ds_i_month - 10)) || (y > ds_i_year + 2))
		{
			if (confirm("Cette date est très éloignée. Êtes vous sûr(e) ?")) 
			{
				ds_element.value = ds_format_date(jour_sem, d, m, y);
				refresh_message();
				ds_hi(); // Hide the calendar.
			}
		}
		else
		{
			ds_element.value = ds_format_date(jour_sem, d, m, y);
			refresh_message();
			ds_hi(); // Hide the calendar.
		}
	}

par Berzemus » 31 janv. 2008, 11:40

C'est à dire que, sans ton code, on va pas pouvoir faire des miracles :wink:
donc autant le mettre tout de go..

Probleme sur calendrier !

par joss91 » 30 janv. 2008, 20:56

Bonjour,

J'ai un problème qui concerne mon calendrier et je ne suis pas un pro du javascript pour le débuguer... voici le souci : le jour de la semaine qui suit d'un mois sur l'autre n'est pas cohérent. par exemple nous serons jeudi 31 demain et vendredi 1 février après demain. Sauf que mon calendrier bug et m'affiche samedi 1 février, dimanche 2 février etc...jusqu'à samedi 29 fevrier. le problème ne revient pas le mois prochain et nous avons le respect des jour de la semaine au bon numéro c'est à dire samedi 1er mars etc... J'ai regardé les année suivantes et ce problème est lié à l'année bissextile car il revient tous les 4 ans sur le mois de fevrier uniquement...

Pour résumé le problème : il y a un décalage d'un jour de la semaine dans le calendrier pour le mois de février d'une année bissextile !!

Si vous voulez le code dites-le moi je vous le fourni mais il est un poil long... Merci d'avance pour votre aide !!