Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   По номеру недели получить дату понедельника этой недели (https://javascript.ru/forum/misc/14017-po-nomeru-nedeli-poluchit-datu-ponedelnika-ehtojj-nedeli.html)

zhulanov 24.12.2010 12:21

По номеру недели получить дату понедельника этой недели
 
Здравствуйте.
Есть номер недели в году, например 2, нужно получить дату понедельника в этой неделе.

Мой вариант ниже, но дело в том, что он работает не корректно. Буду рад любой помощи)

Если задать wnum = 1 (номер недели = 1), то результатом работы скрипта будет дата будет Sat Jan 02 2010 14:26:11 GMT+0500, что совсем не то, т.к. понедельник первой недели 2010 года - это 4 января, и уж никак не второе.

//Номер недели
var wnum = 1;

//Количество дней от 1 января до понедельника этой недели
var countdays = wnum * 7 - 6;

//1 января текущего года
var firstDayOfCurYear = new Date();
firstDayOfCurYear.setFullYear(firstDayOfCurYear.getFullYear(), 0, 1);

//Точная дата понедельника для заданной недели
var dateOfMondayInWeek = new Date(firstDayOfCurYear.valueOf() + countdays * 24 * 60 * 60 * 1000);

dmitriymar 24.12.2010 13:33

Цитата:

Сообщение от zhulanov
. понедельник первой недели 2010 года - это 4 января, и уж никак не второе.

мож стоит с календарём сначала разобраться? понедельник будет 3 января:yes: возьми дату выдаваемую ,сложи со своей версией даты. раздели на два и получишь реальную дату:D

zhulanov 24.12.2010 13:36

Цитата:

понедельник первой недели 2010 года - это 4 января
Если уж отвечаете, то читайте внимательнее, прежде чем советы давать.

Вопрос закрыт, сам разобрался.

dmitriymar 24.12.2010 13:38

я в календарь смотрю:D

dmitriymar 24.12.2010 13:43

дествительно не тот год посмотрел

рони 24.12.2010 14:12

Вариант )))
function DateOfMondayInWeek(b, c) {
    for (var a = 1;; a++) if ((new Date(b, 0, a)).getDay() == 1) break;
    a += (c - 1) * 7;
    return new Date(b, 0, a)
}
alert(DateOfMondayInWeek(2010, 1));

with-love-from-siberia 24.12.2010 14:30

Определение даты для любого дня недели по номеру недели
// определяемый год
var y = 2010;

// номер полной недели в году (считается от нуля)
var n = 0;

// номер дня недели (1 - понедельник, 0 - воскресенье)
var w = 1;

// первый день года
var d1 = new Date(y, 0, 1);

// его день недели
var firstDay = d1.getDay();

// день в году
var days = firstDay == w 
	? 1 
	: (n + 1) * 7 + w - (firstDay - 1);

// дата для указанного дня недели
var dn = new Date(y, 0, days);

alert(dn);

Aetae 02.01.2011 19:30

Для любого дня, красивее.
//недели и дни с еденицы, в русском варианте
function getDayInWeek (week,day,year) {
  var w=week||1,n=day||1,y=year||new Date().getFullYear(); //defaults
  var d=new Date(y,0,7*w);
  d.setDate(d.getDate()-(d.getDay()||7)+n);
  return d
}
alert(getDayInWeek())
alert(getDayInWeek(1,1,2010))
alert(getDayInWeek(3,2,2010))


//Припозднился чуток, но делать нефиг.

realdreamy 19.12.2011 09:04

today = new Date()
weekNumber = today.toLocaleFormat("%U")

Norm Iridium 02.10.2014 02:33

var d=new Date(y,0,7*(w-1));

у вас на неделю спешит кажется... минус один дописал


Часовой пояс GMT +3, время: 02:45.