Newsgroup: it.comp.lang.javascript
Titolo: passare da settimana a data.

Ciao a tutti,
ho un piccolo dilemma:
ho preparato un form che presenta agli utenti la scelta di una data
per un inserimento in un db: la presento però in un formato
particolare:
    Lun (GIORNO) - 44 (NUMERO SETTIMANA LAVORATIVA ) - 2003 (ANNO);
    Mar - 44 -2003;
Praticamente ho un <select> per il giorno, uno per la settimana, e uno
per l'anno.
Ora è sorta la necessità di recuperare le informazioni dal db per
periodi di temo tipo: dal 4/6/2003 al 15/8/2003.
Ho pensato di inserire nell'entita in oggetto un campo nuovo di tipo
DataType, che chiamerò Data_inserimento.
La mia domanda è come posso ricrearmi questa data da Giorno,
Settimana, Anno.
Praticamente senza variare il form, ma ricostruendomi in maniera
trasparente per l'utente questa data da inserire?
Ho trovato sul NG una funzione che dalla data di oggi ritrova la
settimana, ma non ho capito come ricostruire la funzione inversa:
function takeYear(theDate)
{
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}
function getWeekNr()
{
	var today = new Date();
	Year = takeYear(today);
	Month = today.getMonth();
	Day = today.getDate();
	now = Date.UTC(Year,Month,Day+1,0,0,0);
	var Firstday = new Date();
	Firstday.setYear(Year);
	Firstday.setMonth(0);
	Firstday.setDate(1);
	then = Date.UTC(Year,0,1,0,0,0);
	var Compensation = Firstday.getDay();
	if (Compensation > 3) Compensation -= 4;
	else Compensation += 3;
	NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);
	return NumberOfWeek;
}
Qualcuno ha qualche idea?
Grazie a tutti per l'attenzione.
Alberto.

 Settimana, Anno.
Senti, non sono esperto di funzioni di manipolazione di date in js, pero'
posso provare a tirar giu' un algoritmo che poi potrai implementarti. Lo
scrivo in pseudo_codice:
function get_date(gds, sett, anno) {
    // Nota. gds = giorno della settimana
    // inizializzo al primo gennaio
    tmp_giorno = '01/01/anno';
    // cerco il primo giorno dell'anno corrispondente al
    // giorno della settimana che mi interessa
    while (get_gds(tmp_giorno) != gds) tmp_giorno =
dateadd(day,tmp_giorno,1);
    // faccio avanzare il giorno di (sett-1) settimane
    dateadd(week,tmp_giorno,sett-1)
    return tmp_giorno;
}
Note.
get_gds(data)
    e' una funzione che ricava il giorno della settimana da una data;
    es. get_gds('29/10/2003') = mercoled'
    Ci dovrebbe essere una funzione js corrispondente.
dateadd(unita', data, quantita')
    e' una funzione che presa una data la trasla di quantita' unita'
    es. dateadd(day,'29/10/2003',1) = '30/10/2003'
    es. dateadd(week,'11/10/2003',2) = '25/10/2003'
    Ci dovrebbe essere una funzione js corrispondente.
Se una di queste due funzioni non esiste gia' fatta in js, te le devi
implementare da solo.
Ciao,
Ema

 > La mia domanda è come posso ricrearmi questa data da Giorno,

Grazie Ema,
   avevo effetivamente la mente stanca per arrivarci da solo!
Ora mi metto al lavoro e magari ri posterò la soluzione.
le funzioni che cercavi in js possono essere praticamente riscritte così:
var data_gg = new Date("29/10/2003");
var gg_sett = data_gg.getDay();
// Inserirà in gg_sett un numero da 0 a 6
// e sei a posto.
Grazie e ciao.
Alberto