2010-12-29 13 views
5

ho numero della settimana e dell'anno, hanno bisogno di scoprire la data (venerdì) in quella settimana e dell'anno.Ottenere venerdì dalle numero della settimana e l'anno in javascript

function getFriday(week_num, year) 
{ 
    ? 

    return friday_date_object; 
} 

Come faccio?

+0

Sicuramente getDay (day_num, week_num, year) sarebbe più utile? – Jim

+0

"Devi convertirlo al venerdì di quella particolare settimana"? - Rifletti la tua domanda - è difficile dire esattamente cosa stai chiedendo. – JM4

+0

@Jim day_num è sempre 5 (venerdì), la tua funzione restituirà lo stesso risultato, sì – Peter

risposta

16

La settimana # 1 è la settimana con il primo Giovedi.

Ecco una funzione per ottenere qualsiasi giorno: numeri

var w2date = function(year, wn, dayNb){ 
    var j10 = new Date(year,0,10,12,0,0), 
     j4 = new Date(year,0,4,12,0,0), 
     mon1 = j4.getTime() - j10.getDay() * 86400000; 
    return new Date(mon1 + ((wn - 1) * 7 + dayNb) * 86400000); 
}; 
console.log(w2date(2010, 1, 4)); 

settimana partono da 1 fino a 52 o 53, dipende l'anno.
Per i numeri del giorno, 0 è lunedì, 1 martedì, ... e 4 è venerdì

+0

grazie, questo funziona bene – Peter

1

utilizzare la Libreria date.js. È ottimo per tutte le funzioni relative alla data.

+0

Non posso usare nessuna libreria esterna, grazie comunque. – Peter

1

Ecco qualche rapido codice

var DAY = 86400000; 

function getFriday(weekNum, year) { 
    var year = new Date(year.toString()); // toString first so it parses correctly year numbers 
    var daysToFriday = (5 - year.getDay()); // Note that this can be also negative 
    var fridayOfFirstWeek = new Date(year.getTime() + daysToFriday * DAY); 
    var nthFriday = new Date(fridayOfFirstWeek.getTime() + (7 * (weekNum - 1) * DAY)); 
    return nthFriday; 
} 

Split alcune variabili per la leggibilità.

Ma se vi trovate a scrivere operazioni di tempo più complesse, si sta meglio utilizzando una libreria, invece.

+0

new Date (2010) restituisce Gio 01 01 1970 con Chrome – Mic

+0

Qual è la variabile DAY che rappresenta? –

+0

@ Blake, il numero di millisecondi in un giorno – Mic

0

Penso che se non dovrei usare qualsiasi libreria di Data lo farei:

assumendo u utilizzare una settimana cristiano, dove la domenica è il giorno Frist della settimana. questo è necessario per scoprire se i primi giorni in un anno appartengono o no alla prima settimana dell'anno.

creare un array. mesi = nuova matrice (31,28,31, ...) se (anno% 4 == 0), quindi febbraio ha 29 giorni.

giorni = num_week * 7;

poi iterare il mese e diminuzione giorni per mese [corrente]. se i giorni diventano negativi, aumentano di nuovo i giorni con i giorni del mese corrente.

risultato: Yearbook (corrente + 1) -Days

Spero che questo ti aiuta. quello che devi aggiungere da solo è la gestione per gennaio e i primi giorni.

+1

anno bisestile è calcolato nel modo seguente: '((anno% 4 === 0) && (anno% 100! == 0)) || (anno% 400 === 0) ' – magikMaker

Problemi correlati