2016-09-22 3 views
1

Редактировать: Я обновил код до нового. Все работает отлично, за исключением одной строки, которая вступает в этот месяц: if ((q < 1 || q> 28) & & (m == 2) & & (q% 4 === 0) & & (! (Q% 100)))Javascript не применяет условия?

Итак, я, наконец, получил свой калькулятор, чтобы начать работать, но он не соответствует моим условиям. Например, если я набираю 40-й сентябрь, это дает мне день. Очевидно, этого не должно быть. Любая идея, где я пошла не так?

Благодаря

`функция handleInput (форма) { попытка { вар форма = document.getElementById ("Timeform");

  var strYears = form.years.value; 
      var strMonths = form.months.value; 
      var strDays = form.days.value; 

      var Y = parseInt(strYears); 
      var m = parseInt(strMonths); 
      var q = parseInt(strDays); 
      var h = ""; 
      var output = ""; 

      if (isNaN(Y)) 
      throw ("Incorrect input. Years is not a number."); 

      if (Y < 0 || Y > 9999) 
      throw "Incorrect input. Years is out of expected range (0-9999)."; 

      if (isNaN(m)) 
      throw "Incorrect input. Months is not a number."; 

      if (m < 1 || m > 12) 
      throw "Incorrect input. Months is out of expected range (1-12)."; 

      if (isNaN(q)) 
      throw "Incorrect input. Days is not a number."; 

      if ((q < 1 || q > 31) && (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)) 
      throw "Incorrect input. Days is out of expected range (1-31)."; 

      if ((q < 1 || q > 30) && (m == 4 || m == 6 || m == 9 || m == 11)) 
      throw "Incorrect input. Days is out of expected range (1-30)."; 

      if ((q < 1 || q > 28) && (m == 2) && (q % 4 === 0) && (!(q % 100))) 
      throw "Incorrect input. Days is out of expected range (1-28)."; 

      if (m == 1 || m == 2) { 
       m = m + 12; 
       Y = Y - 1; 
       } 

       h = (q + Math.floor(13 * (m + 1)/5) + Y + Math.floor(Y/4) 
       - Math.floor(Y/100) + Math.floor(Y/400)) % 7; 
       { 

      if (h == 0) 
       h = "Saturday"; 
      if (h == 1) 
       h = "Sunday"; 
      if (h == 2) 
       h = "Monday"; 
      if (h == 3) 
       h = "Tuesday"; 
      if (h == 4) 
       h = "Wednesday"; 
      if (h == 5) 
       h = "Thursday"; 
      if (h == 6) 
       h = "Friday"; 



      var output = h; 
       document.getElementById("output").innerHTML = output; 

       } 
     } 
     catch(error){ 
      document.getElementById("output").innerHTML = "Error: " + error; 
        } 
    }` 
+0

почему назначая значение т, если выполнено условие (д < 1 && q > 31) && (т = 1 || 3 || 5) –

+0

Вы используете '=' вместо '' == при сравнении месяца, так все, что вы делаете, присваивает значение 'm'. –

+0

Этот код даже не действителен: Uncaught SyntaxError: Неожиданный токен) – Damien

ответ

0

это должно работать нормально

function handleInput(form) { 
    try { 


      var form = document.getElementById("timeForm"); 

      var strYears = form.years.value; 
      var strMonths = form.months.value; 
      var strDays = form.days.value; 
      var Y = parseInt(strYears); 
      var m = parseInt(strMonths); 
      var q = parseInt(strDays); 
      var h = ""; 
      var output = ""; 

      if (isNaN(Y)) 
      throw ("Incorrect input. Years is not a number."); 

      if (Y < 0 || Y > 9999) 
      throw "Incorrect input. Years is out of expected range (0-9999)."; 

      if (isNaN(m)) 
      throw "Incorrect input. Months is not a number."; 

      if (m < 1 || m > 12) 
      throw "Incorrect input. Months is out of expected range (1-12)."; 

      if (isNaN(q)) 
      throw "Incorrect input. Days is not a number."; 

      if ((q < 1 || q > 31) && (m == 1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)) 
      throw "Incorrect input. Days is out of expected range (1-31)."; 

      if ((q < 1 || q > 30) && (m == 4 || m== 6 || m== 9 || m==11)) 
      throw "Incorrect input. Days is out of expected range (1-30)."; 

      if ((q < 1 || q > 28) && (m == 2)) 
      throw "Incorrect input. Days is out of expected range (1-28)."; 

      if (m == 1 || m == 2) { 
       m = m + 12; 
       Y = Y - 1; 
       } 

       h = (q + Math.floor(13 * (m + 1)/5) + Y + Math.floor(Y/4) 
       - Math.floor(Y/100) + Math.floor(Y/400)) % 7; 
       { 

      if (h == 0) 
       h = "Saturday"; 
      if (h == 1) 
       h = "Sunday"; 
      if (h == 2) 
       h = "Monday"; 
      if (h == 3) 
       h = "Tuesday"; 
      if (h == 4) 
       h = "Wednesday"; 
      if (h == 5) 
       h = "Thursday"; 
      if (h == 6) 
       h = "Friday"; 



      var output = h; 
       document.getElementById("output").innerHTML = output; 

       } 
     } 
     catch(error){ 
      document.getElementById("output").innerHTML = "Error: " + error; 
        } 
    } 
+0

Спасибо! Вы изменили значение = на == и && на ||? Или что-то еще, чего я не заметил? – brodude

+0

нет, вот и все, что я изменил –

+0

, пожалуйста, поддержите ответ, если он правильный –

0

Есть много ошибок. Надеюсь, я все их исправил.

// Code goes here 

function handleInput(form) { 
    try { 
    var form = document.getElementById("timeForm"); 

    var strYears = form.years.value; 
    var strMonths = form.months.value; 
    var strDays = form.days.value; 

    var Y = parseInt(strYears); 
    var m = parseInt(strMonths); 
    var q = parseInt(strDays); 
    var h = ""; 
    var output = ""; 

    if (isNaN(Y)) 
     throw ("Incorrect input. Years is not a number."); 

    if (Y < 0 || Y > 9999) 
     throw "Incorrect input. Years is out of expected range (0-9999)."; 

    if (isNaN(m)) 
     throw "Incorrect input. Months is not a number."; 

    if (m < 1 || m > 12) 
     throw "Incorrect input. Months is out of expected range (1-12)."; 

    if (isNaN(q)) 
     throw "Incorrect input. Days is not a number."; 

    if ((q < 1 || q > 31) && ([1, 3, 5, 7, 8, 10, 12].indexOf(m) != -1)) 
     throw "Incorrect input. Days is out of expected range (1-31)."; 

    if ((q < 1 || q > 30) && ([4, 6, 9, 11].indexOf(m) != -1)) 
     throw "Incorrect input. Days is out of expected range (1-30)."; 

    if ((q < 1 || q > 28) && (m == 2)) 
     throw "Incorrect input. Days is out of expected range (1-28)."; 

    if (m == 1 || m == 2) { 
     m = m + 12; 
     Y = Y - 1; 
    } 

    h = (q + Math.floor(13 * (m + 1)/5) + Y + Math.floor(Y/4) - Math.floor(Y/100) + Math.floor(Y/400)) % 7; { 

     if (h == 0) 
     h = "Saturday"; 
     if (h == 1) 
     h = "Sunday"; 
     if (h == 2) 
     h = "Monday"; 
     if (h == 3) 
     h = "Tuesday"; 
     if (h == 4) 
     h = "Wednesday"; 
     if (h == 5) 
     h = "Thursday"; 
     if (h == 6) 
     h = "Friday"; 



     var output = h; 
     document.getElementById("output").innerHTML = output; 

    } 
    } catch (error) { 
    document.getElementById("output").innerHTML = "Error: " + error; 
    } 
} 
+0

Спасибо, что один работает. Знаете ли вы, почему месяц 2 перепутался, когда я добавляю это? Он продолжает подсчитываться после 28. Остальные месяцы по-прежнему работают. if ((q < 1 || q > 28) && (m == 2) && (q% 4 === 0) && (! (q% 100))) – brodude

+0

вы должны использовать Year, чтобы проверить, является ли это bisect ((q < 1 || q > 28) && (m == 2) && (Y% 4 === 0)) –

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