2012-03-23 4 views
3

В моей форме у меня есть поле данных, где я выбираю день недели! Например, если я выбираю сегодня 23-03-2012 в пятницу, мне нужно получить несколько дней с предыдущего понедельника до следующей субботы.Рассчитать дни недели с понедельника по субботу

массив:

[0],[19-03-2012],[Monday] 
[1],[20-03-2012],[Monday] 
[2],[21-03-2012],[Wednesday] 
[3],[22-03-2012],[Monday] 
[4],[23-03-2012],[Friday] 
[5],[24-03-2012],[Saturday] 

Как я могу сделать это для любого выбранного дня недели, очевидно, обращая внимание на изменения? Благодаря

+0

Если выбранный день понедельника? –

ответ

2

Эта функция возвращает массив всех даты на неделе date, с понедельника по субботу.

function GetDaysOfWeek(date) 
{ 
    var days = new Array(); 
    for (var i = 0; i < 6; i++) 
    { 
     days[i] = new Date(date.getYear(), 
          date.getMonth(), 
          date.getDate() - date.getDay() + 1 + i); 
    } 
    return days; 
} 
+1

Красиво сделано, сэр! Однако я бы использовал date.getFullYear(), иначе день недели будет неправильным. – Dom

1

mayby ​​опробовать MomentJs: http://momentjs.com/docs/

некоторые примеры:

moment().day(-7); // set to last Sunday (0 - 7) 
moment().day(7); // set to next Sunday (0 + 7) 
moment().day(10); // set to next Wednesday (3 + 7) 
moment().day(24); // set to 3 Wednesdays from now (3 + 7 + 7 + 7) 
0

Для отображения текущего дня недели:

var now = new Date(); 
var dayNames = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; 
document.write("Today is " + dayNames[now.getDay()] + "."); 
+0

Я думаю, что OP хочет все дни на этой неделе, а не только сегодня. –

0
  • Первое свидание находкой сегодняшнюю
  • Найти последний понедельник (включая сегодня)
  • Показать, что дата, и в последующие 5 дней после него (вторник-суббота)

var d = new Date(); 

if (d.getDay()==0){ 
    d.setDate(d.getDate() + 1); 
} 

​while (d.getDay() != 1){ 
    d.setDate(d.getDate() - 1); 
} 

var days = new Array(); 

for (var i = 0; i < 6; i++){ 
    days[i] = d.getDate() + i; 
} 

return days; 
+0

Ошибка по воскресеньям. –

+0

@ KendallFrey Пожалуйста, уточните? – Curt

+0

Воскресенье вернется на предыдущую неделю вместо текущей недели. –

0

попробуйте следующее:

var dayString = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; 

var now = new Date(); 
var currentDay = now.getDay(); // return 0 for Sunday, 6 for Saturday 
var result = []; 
var tempDate = new Date(now.getTime()); 
tempDate.setDate(now.getDate()-(currentDay+6)%7); // now tempDate is previous Monday 
while(tempDate.getDay()!=0) { 
    var currentMonth = tempDate.getMonth()+1; 
    if(currentMonth<10) currentMonth = "0"+currentMonth; 
    result.push([tempDate.getDay()-1,tempDate.getDate()+"-"+currentMonth+"-"+tempDate.getFullYear(),dayString[tempDate.getDay()]]); 
    tempDate.setDate(tempDate.getDate()+1); 
} 
console.log(result); 
0

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

// Assuming d is a date object 
function getDateArray(din) { 

    // Add leading zero to one digit numbers 
    function aZ(n){return (n<10? '0':'') + n;} 

    var days = ['Sunday','Monday','Tuesday','Wednesday', 
       'Thursday','Friday','Saturday']; 
    var d = new Date(din); // Don't wreck input date 
    var dn = d.getDay(); 
    var a = []; 
    var i = 6; // length of day array 

    if (!dn) { 
    // It's Sunday, what now? 
    return ['Sunday!']; 
    } 

    d.setDate(d.getDate() + 6 - dn); // Next Saturday 

    do { 
    a[i--] = i + ' ' + aZ(d.getDate()) + 
      '-' + aZ(d.getMonth() + 1) + 
      '-' + d.getFullYear() + 
      ' ' + days[d.getDay()];  
    d.setDate(d.getDate() - 1); 
    } while (i); 

    return a; 
} 

// Test it 
var date = new Date(2012,2,2) 

alert(date + '\n\n' + getDateArray(date).join('\n')); 

/* 

    Fri Mar 02 2012 00:00:00 

    0 27-02-2012 Monday 
    1 28-02-2012 Tuesday 
    2 29-02-2012 Wednesday 
    3 01-03-2012 Thursday 
    4 02-03-2012 Friday 
    5 03-03-2012 Saturday 

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