Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2020, 11:09
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

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

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

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.

Спасите от катаклизма
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2020, 11:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от 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>
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2020, 11:42
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

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

Последний раз редактировалось savsoft, 19.02.2020 в 11:51.
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2020, 11:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от savsoft
я проверил, так и есть.
???
Ответить с цитированием
  #5 (permalink)  
Старый 19.02.2020, 11:54
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

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

Последний раз редактировалось savsoft, 19.02.2020 в 12:00.
Ответить с цитированием
  #6 (permalink)  
Старый 19.02.2020, 12:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
где код который глючит?
Ответить с цитированием
  #7 (permalink)  
Старый 19.02.2020, 12:21
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

Сообщение от рони Посмотреть сообщение
savsoft,
где код который глючит?
Похоже все дело в этой функции

function dateFormat(date)
           {
              return date.toISOString().replace(/T.+$/, "")
           }
Ответить с цитированием
  #8 (permalink)  
Старый 19.02.2020, 12:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

savsoft,
попробуйте так
const dateFormat = date => {
 const [d,m,y] = date.toLocaleDateString("ru").split(".");
 return `${y}-${m}-${d}`
 }
Ответить с цитированием
  #9 (permalink)  
Старый 19.02.2020, 13:13
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 162

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

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

Последний раз редактировалось savsoft, 19.02.2020 в 13:16.
Ответить с цитированием
  #10 (permalink)  
Старый 19.02.2020, 13:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнить две даты avsavs Общие вопросы Javascript 3 26.03.2016 10:45
Freelance. Нужен календарь на Javascript для подстановки в <input /> даты и времени. DiYanka Работа 1 14.06.2014 02:03
Имеет ли смысл хранить даты в отдельной таблице? frutality Серверные языки и технологии 7 15.08.2013 19:39
проблема с сортировкой даты rave82 jQuery 3 27.09.2011 01:35
Подсчет дней в IE, даты пользователя gotravelman Internet Explorer 6 26.02.2009 16:25