Как определить, какая дата в пятницу? - PullRequest
3 голосов
/ 06 апреля 2010

У меня есть два выпадающих списка - один на год и один на недели. Как определить выбранную дату недели должна быть пятница. Так, например, я выбрал неделю 34 и год 2011, тогда я должен знать дату в пятницу в следующем формате: 2011-08-23. И желательно в JavaScript тоже.

Ответы [ 3 ]

7 голосов
/ 06 апреля 2010

Использовать date.js .Это очень удобно для любой связанной с датой Javascripting.

Примеры с их сайта:

// What date is next thrusday?
Date.today().next().thursday();

// Add 3 days to Today
Date.today().add(3).days();

// Is today Friday?
Date.today().is().friday();

// Number fun
(3).days().ago();

// 6 months from now
var n = 6;
n.months().fromNow();

// Set to 8:30 AM on the 15th day of the month
Date.today().set({ day: 15, hour: 8, minute: 30 });

// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');
1 голос
/ 06 апреля 2010

Учитывая недавнюю версию (из SVN) date.js , следующее даст вам то, что вы ищете.

function date_of_friday(year, week) {
    return Date.parse(year + "-01-01").setWeek(week).next().friday();
}

Как показано ниже, это дает правильный ответ для вашего примера, а также для случая, когда первый день года находится на неделе номер 1, и случай, когда его нет (неделя № 1 - это неделя, содержащая первый Четверг года, в соответствии с ISO 8601 ).

date_of_friday(2011, 34); // Fri Aug 26 2011 00:00:00 GMT+0200 (CET)
date_of_friday(2011, 1);  // Fri Jan 07 2011 00:00:00 GMT+0100 (CET)
date_of_friday(2013, 1);  // Fri Jan 04 2013 00:00:00 GMT+0100 (CET)
0 голосов
/ 06 апреля 2010

Вы также можете использовать меньшую «библиотеку»:

Date.fromWeek= function(nth, y, wkday){
    y= y || new Date().getFullYear();
    var d1= new Date(y, 0, 4);
    if(wkday== undefined) wkday= 1;
    return d1.nextweek(wkday, nth);
}
Date.prototype.nextweek= function(wd, nth){
    if(nth== undefined) nth= 1;
    var incr= nth < 0? 1: -1,
    D= new Date(this), dd= D.getDay();
    if(wd== undefined) wd= dd;
    while(D.getDay()!= wd) D.setDate(D.getDate()+ incr);
    D.setDate(D.getDate()+ 7*nth);
    return D;
}
// test case
var dx= Date.fromWeek(34, 2011, 5);
alert([dx.getFullYear(), dx.getMonth()+1, dx.getDate()].join('-'));
/*returned value: (String) 2011-8-26*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...