2010-12-29 22 views
5

Tengo el número de semana y el año, necesito saber la fecha (viernes) en esa semana y año.Obtener viernes a partir del número de semana y año en javascript

function getFriday(week_num, year) 
{ 
    ? 

    return friday_date_object; 
} 

¿Cómo puedo hacer eso?

+0

Seguramente getDay (day_num, week_num, year) sería más útil? – Jim

+0

"¿Necesita convertir eso al viernes de esa semana en particular"? - Por favor, vuelva a redactar su pregunta - es difícil decir exactamente lo que está preguntando. – JM4

+0

@Jim day_num siempre es 5 (viernes), su función devolverá el mismo resultado, sí – Peter

Respuesta

16

La semana n. ° 1 es la semana del primer jueves.

Aquí es una función para obtener cualquier día: los números

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)); 

semana comienzan a partir de 1 hasta 52 o 53, depende del año.
Para los números del día, 0 es lunes, 1 es martes, ... y 4 es viernes

+0

gracias, este funciona bien – Peter

1

Utilice la biblioteca date.js. Es ideal para todas las funciones relacionadas con la fecha.

+0

No se puede utilizar ninguna biblioteca externa, gracias de todos modos. – Peter

1

Aquí hay algo de código rápido

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; 
} 

de Split algunas variables para facilitar la lectura.

Pero si se encuentra escribiendo operaciones de tiempo más complejas, es mejor usar una biblioteca en su lugar.

+0

nueva Fecha (2010) da Thu Jan 01 1970 con Chrome – Mic

+0

¿Qué representa la variable DAY? –

+0

@Blake, el número de milisegundos en un día – Mic

0

Creo que si no se debería utilizar cualquier biblioteca de la fecha que lo haría:

asumiendo el uso de u una semana cristiana, donde el domingo es el día de la semana Frist. esto es necesario para saber si los primeros días de un año pertenecen o no a la primera semana del año.

crear una matriz. months = new Array (31,28,31, ...) if (year% 4 == 0) then febrero tiene 29 días.

days = num_week * 7;

luego iterar durante el mes y disminuir días por mes [actual]. si los días se vuelven negativos, aumente los días con los días del mes actual nuevamente.

resultado: año- (actual + 1) -days

espero que esto le ayuda. lo que tiene que agregar por su cuenta es el manejo de enero y los primeros días.

+1

año bisiesto se calcula así: '((año% 4 === 0) && (año% 100! == 0)) || (año% 400 === 0) ' – magikMaker

Cuestiones relacionadas