Количество дней в любом месяце [дубликат]

По некоторым причинам мне нравится Schwartzian, преобразовывают

@sorted = map  { $_->[0] }
          sort { $a->[1] cmp $b->[1] }
          map  { [$_, foo($_)] }
                @unsorted;

Где нечто ($) представляет вычисление - интенсивное выражение, которое берет $ (каждый объект списка в свою очередь) и производит соответствующее значение, которое должно быть сравнено в его пользе.

18
задан Taryn East 15 March 2013 в 03:40
поделиться

5 ответов

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

function numberOfDays(year, month) {
    var d = new Date(year, month, 0);
    return d.getDate();
}

Из-за високосных лет нужно пропускать и год.

45
ответ дан 30 November 2019 в 05:34
поделиться
function getDaysInMonth(m, y) {
   return /8|3|5|10/.test(--m)?30:m==1?(!(y%4)&&y%100)||!(y%400)?29:28:31;
}
51
ответ дан 30 November 2019 в 05:34
поделиться

Thirty days hath September,
April, June, and November;
All the rest have thirty-one,
Excepting February alone,
Which hath twenty-eight days clear,
And twenty-nine in each leap year.

<3 Wikipedia

27
ответ дан 30 November 2019 в 05:34
поделиться

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

function DaysinMonth(aDate)  {
    return aDate.setMonth(aDate.getMonth()+1, 0).getDate();
}    
0
ответ дан 30 November 2019 в 05:34
поделиться

В духе того, что не выполняет за вас домашнее задание , я представляю версию в POVRay (извините, не JS ) Я сделал это много лет назад.

В POVRay нет логических переменных . Метод, который я придумал, заключался в создании полинома от «m», который давал ответ> 0 для месяцев с 31 днем ​​и <0 для месяцев с 30 днями.

#declare m0 = (m-0.5)*(m-1.5)*(m-2.5)*(m-3.5)*(m-4.5)*(m-5.5);
#declare m0 = m0*(m-6.5)*(m-8.5)*(m-9.5)*(m-10.5)*(m-11.5);
#if (m0 > 0)
  #declare maxdays = 31;
#else
  #declare maxdays = 30;
#end

Сложная часть - решить, когда год является скачком. год. Это полный тест на високосные годы. Большинство людей знают о правиле четырех лет, а с 2000 года некоторые знают о правилах 100 и 400 лет, не правила 4000 лет.

#declare LEAPYEAR = 2.0;
#if (mod(YEAR,4.0)=0)
  #declare LEAPYEAR = 1.0;
  #if (mod(YEAR,100.0)=0)
    #declare LEAPYEAR = 2.0;
  #end
  #if (mod(YEAR,400.0)=0
    #declare LEAPYEAR = 1.0;
  #end
#end
#if (MONTH = 2.0)
  #declare maxdays = maxdays - LEAPYEAR;
#end
#if (DAY > maxdays)
  #declare MONTH = MONTH + 1;
  #declare DAY = DAY - maxdays;
#end
#if (MONTH > 12)
  #declare YEAR = YEAR + 1;
  #declare MONTH = MONTH - 12;
#end
1
ответ дан 30 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: