2010-06-04 5 views
2

Я использую довольно хороший контроль даты iPhone для только iPhone сайта я разрабатываю: http://cubiq.org/spinning-wheel-on-webkit-for-iphone-ipod-touchУстановки месяца и года в течение следующих 6 месяцев Javascript

Один из колес, которые я хочу, чтобы создать в основном следующий 6 месяцев с отображенным месяцем и годом. Для жесткого кода этого я использовал:

var monthsYears = { 
    '05-2010': 'Jun 2010', 
    '06-2010': 'Jul 2010', 
    '07-2010': 'Aug 2010', 
    '08-2010': 'Sep 2010', 
    '09-2010': 'Oct 2010', 
    '10-2010': 'Nov 2010' 
}; 

Если взять первый '05-2010': 'Jun 2010'

05 это значение месяц 2010 это год и Jun это имя

месяц Но очевидно, что это не имеет смысла поскольку он не будет работать в следующем месяце! Но я не понимаю, как заставить это работать динамически. Любая помощь оценивается.

ответ

2

Далее следует избегать проблем при добавлении в месяц в последний день месяца, заканчивающийся на 31:

var monthsYears = (function() { 
    var result = {}; 
    var d = new Date(); 
    var monthsStr = [ 
     'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
     'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' 
    ]; 
    var month = d.getMonth(); 
    var year = d.getFullYear(); 
    var padding = ''; 

    for (i = 0; i <= 5; i++) { 
     padding = month < 9 ? '0' : ''; 
     result[padding + (month + 1) + '-' + year] = monthsStr[month] + ' ' + year; 

     if (++month > 11) { 
     month = 0; 
     year++; 
     } 
    } 

    return result; 
})(); 
+0

Да, это прекрасный способ сделать это. Благодаря! (Я полагаюсь на объект «Дата», чтобы узнать, когда конец года, потому что я не доверяю себе!) – Pointy

+0

@Pointy: Lol! Не доверять себе - очень хорошая практика :) ... Хорошая идея использовать 'setDate (1)'. Это аккуратно. –

3

Объект Javascript Date имеет все необходимые API.

var monthsYears = (function() { 
    var d = new Date(), rv = {}, 
    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; 
    d.setDate(1); // handle February!! 
    for (var n = 1; n <= 6; ++n) { 
    var mn = d.getMonth() + 1; 
    mn = (mn < 10 ? '0' : '') + mn; 
    rv[ '' + mn + '-' + d.getFullYear()] = 
     months[d.getMonth()] + ' ' + d.getFullYear(); 
    d.setMonth(d.getMonth() + 1); 
    } 
    return rv; 
})(); 

Это, безусловно, будет работать должным образом в течение границы года, между прочим.

+0

Превосходно работает удовольствие. Большое спасибо –

+0

Будет ли он работать правильно, если день 31-го числа месяца, так как будет увеличивать месяц на 'setMonth()'? –

+0

... Попробуйте использовать 'new Date ('2010-01-31')' ... Он пропустит «Февраль». –

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