Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не суммирует (https://javascript.ru/forum/misc/79439-ne-summiruet.html)

nikofedorov 09.02.2020 19:02

Не суммирует
 
Задача:
Взять дату, например 10.10.1991
Сложить все числа даты и получить 22
А потом сложить 2+2 = 4

22 получаю без проблем, а с получением 4 проблема.
Прошу помочь, с JS сталкивался редко, думаю для многих вопрос будет примитивным. Не могу понять в чем загвоздка.

<h1>Введи дату рождения</h1>
 <input type="date" id="myDate" value="2001-01-01">
 

 <button onclick="MyFunction()"> Submit </button>
<h1>Дата рождения</h1> <p id="demo"></p>
<h1>Сумма даты рождения</h1> <p id="demo2"></p>
<h1>Сумма суммы даты рождения</h1> <p id="demo3"></p>

 <script>
 function MyFunction() {
 var x = document.getElementById("myDate").value;
 document.getElementById("demo").innerHTML = x;


 var y1 = parseInt(x.charAt(0));
 var y2 = parseInt(x.charAt(1));
 var y3 = parseInt(x.charAt(2));
 var y4 = parseInt(x.charAt(3));

 var m1 = parseInt(x.charAt(5));
 var m2 = parseInt(x.charAt(6));

 var d1 = parseInt(x.charAt(8));
 var d2 = parseInt(x.charAt(9));

 var qwe = y1+y2+y3+y4+m1+m2+d1+d2;

document.getElementById("demo2").innerHTML = qwe;

 var s1 = parseInt(qwe.charAt(0));
 var s2 = parseInt(qwe.charAt(1));

 var zaq = s1+s2;

 document.getElementById("demo3").innerHTML = zaq;

 }
 </script>

laimas 09.02.2020 19:20

qwe - это не строка, нет у нее метода charAt(), только если привести к строке, а затем ... qwe.toString().charAt....

рони 09.02.2020 19:41

nikofedorov,
<!DOCTYPE html>
<html>
<head lang="ru">
  <title>Untitled</title>
  <meta charset="utf-8">

</head>
<body>
<h1>Введи дату рождения</h1>
 <input type="date" id="myDate" value="1991-10-10" >


 <button onclick="MyFunction()"> Submit </button>
<h1>Дата рождения</h1> <p id="demo"></p>
<h1>Сумма даты рождения</h1> <p id="demo2"></p>
<h1>Сумма суммы даты рождения</h1> <p id="demo3"></p>

 <script>
 function MyFunction() {
 var x = document.getElementById("myDate").value;
 document.getElementById("demo").innerHTML = x;
 var f = a => [...a.toString()].filter(a => a == +a).reduce((a,b) => a + +b, 0);
 var qwe = f(x);
 document.getElementById("demo2").innerHTML = qwe;
 var zaq = f(qwe);
 document.getElementById("demo3").innerHTML = zaq;

 }
 </script>
</body>
</html>

ruslan_mart 10.02.2020 14:36

const d = '10.10.1991';
const r = eval(d.replace(/(\d)\D*/g, '+$1'));

console.log(r);

Vlasenko Fedor 10.02.2020 20:20

еще вариант :)
<script>
const stringSumNumber = value => {
  do {
    value = [...String(value)].reduce((p, c) => p + (/\d/.test(c) ? Number(c) : 0), 0)
  }
  while (value > 9)
  return value
}

alert(stringSumNumber('10.10.1991'))

</script>


Часовой пояс GMT +3, время: 08:48.