Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Неправильно прибавляются даты (https://javascript.ru/forum/misc/79526-nepravilno-pribavlyayutsya-daty.html)

savsoft 19.02.2020 11:09

Неправильно прибавляются даты
 
Как-то помогли мне здесь сделать функцию, в которой есть функция получения дат одного дня недели в течении месяца от заданной даты. Если заданная дата последний, например, вторник месяца, то еще и даты всех вторников следующего месяца.

Вот функция формирования массива дат.

function getDates(date)
           {  var arr = [];
              date = new Date(date);
              if(!date) return arr;
              var days = 7;
              date.setDate(date.getDate()  + days);
              var month = date.getMonth();
              while (date.getMonth() == month) {
                  arr.push(dateFormat(date))
                  date.setDate(date.getDate()  + days);
              }
              return arr;
           }


Раньше вроде все было нормально, но сегодня грабли. Задаю 3 марта, в массив заносятся, 10, 17, 24 и 30. В упор не понимаю, должно же быть 31.

Спасите от катаклизма

рони 19.02.2020 11:39

Цитата:

Сообщение от savsoft
и 30

:-?
<script>
 let dateFormat = d => d.toLocaleDateString("ru");
function getDates(date)
           {  var arr = [];
              date = new Date(date);
              if(!date) return arr;
              var days = 7;
              date.setDate(date.getDate()  + days);
              var month = date.getMonth();
              while (date.getMonth() == month) {
                  arr.push(dateFormat(date))
                  date.setDate(date.getDate()  + days);
              }
              return arr;
           }
document.write(getDates(new Date(2020, 2, 3).getTime()))
  </script>

savsoft 19.02.2020 11:42

Раньше работало, потом стали жаловаться, я проверил, так и есть. Отчего это может зависеть?
Причем на других датах работает. Не срабатывает на 2 и 3 марта. Для второго выдает 29 число, вместо 30, а для 3 - 30 вместо 31. Непонятка полная.

рони 19.02.2020 11:47

Цитата:

Сообщение от savsoft
я проверил, так и есть.

???

savsoft 19.02.2020 11:54

Цитата:

Сообщение от рони (Сообщение 520317)
???

Не срабатывает на 2 и 3 марта. Точнее на вторниках и средах, которые начинаются в эти даты. Последняя дата на 1 меньше. Остальные правильно.

рони 19.02.2020 12:17

savsoft,
где код который глючит?

savsoft 19.02.2020 12:21

Цитата:

Сообщение от рони (Сообщение 520319)
savsoft,
где код который глючит?

Похоже все дело в этой функции

function dateFormat(date)
           {
              return date.toISOString().replace(/T.+$/, "")
           }

рони 19.02.2020 12:48

savsoft,
попробуйте так
const dateFormat = date => {
 const [d,m,y] = date.toLocaleDateString("ru").split(".");
 return `${y}-${m}-${d}`
 }

savsoft 19.02.2020 13:13

Цитата:

Сообщение от рони (Сообщение 520321)
savsoft,
попробуйте так
const dateFormat = date => {
 const [d,m,y] = date.toLocaleDateString("ru").split(".");
 return `${y}-${m}-${d}`
 }

Возвращает undefined

А почему нельзя использовать GetDate() + GetMonth + GetFullYear?

рони 19.02.2020 13:18

Цитата:

Сообщение от savsoft
А почему нельзя использовать GetDate() + GetMonth + GetFullYear?

кто вам мешает?


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