2010-12-29 9 views
5

У меня есть номер недели и год, нужно узнать дату (пятница) в эту неделю и год.Получите пятницу с номера недели и года в javascript

function getFriday(week_num, year) 
{ 
    ? 

    return friday_date_object; 
} 

Как это сделать?

+0

Действительно ли getDay (day_num, week_num, year) было бы более полезным? – Jim

+0

«Вам нужно преобразовать это в пятницу той конкретной недели»? - Пожалуйста, переформулируйте свой вопрос - сложно сказать, что именно вы просите. – JM4

+0

@Jim day_num всегда 5 (пятница), ваша функция вернет тот же результат, да – Peter

ответ

16

Неделя № 1 - это неделя с первым четвергом.

Вот функция, чтобы получить в любой день:

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

недели номер начинается на 1 до 52 или 53 не зависит от года.
Для числа суток, 0 - понедельник, 1 - вторник, ... и 4 - пятница

+0

спасибо, этот работает хорошо – Peter

1

Используйте библиотеку date.js. Это отлично подходит для всех связанных с датой функций.

+0

Невозможно использовать любые внешние библиотеки, спасибо в любом случае. – Peter

1

Вот некоторые быстрого кода

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 некоторые переменные для удобства чтения.

Но если вы обнаружите, что занимаетесь более сложными операциями времени, вам лучше использовать библиотеку.

+0

Новая дата (2010) дает Чт 1 января 1970 года с Chrome – Mic

+0

Что представляет собой переменная DAY? –

+0

@Blake, количество миллисекунд в день – Mic

0

я думаю, что если я не должен использовать любую библиотеку даты, я бы:

предполагая и использовать в христианской недели, где воскресенье является Фрист день недели. это необходимо, чтобы выяснить, относятся ли первые дни года к первой неделе года или нет.

создать массив. month = new Array (31,28,31, ...) if (year% 4 == 0), тогда февраль имеет 29 дней.

days = num_week * 7;

затем перебирать месяц и уменьшать количество дней в году [текущий]. если дни снова отрицательно увеличиваются с текущими месяцами.

результат: год- (ток + 1) -Days

я надеюсь, что это поможет вам. что вам нужно добавить самостоятельно - это обращение к январю и первым дням.

+1

Високосный год рассчитывается следующим образом: '((год% 4 === 0) && (год% 100! == 0)) || (год% 400 === 0) ' – magikMaker

Смежные вопросы