Как получить даты, которые находятся между начальной датой и конечной датой и конечной датой, должны быть в формате массива, используя javascript - PullRequest
0 голосов
/ 25 апреля 2020
  1. Я пытаюсь разделить день от полной даты и вычисляю расстояние между ними и вставляю их в массив, чтобы добавить это в базу данных.
   <script>
    function()
    {

      var sd = "26-04-2020";
      var a = sd.split("-");

      var ed = "28-04-2020";
      var b = ed.split("-");

      var p1= a[1];
      var p2= a[2];
      var p3= a[3];

      var q1= b[1];
      var q2= b[2];
      var q3= b[3];

      var datearry = [];

      if( p1<q1 && p2=q2 && p3=q3)
        {
           for (i=p1; i<q1; i++)
           {
             datearry = ("i"+"p2"+"p3");
           }
        }
        else if( p1<q1 && p2<q2 && p3=q3)
       {
         for (i=p1; i<q1; i++)
         {
          for (j=p2; j<q2; j++)
          {
            datearry = ("i"+"j"+"p3");
          }
        }
       }
       else if( p1<q1 && p2<q2 && p3<q3)
        {
          for (i=p1; i<q1; i++)
          {
            for (j=p2; j<q2; j++)
            {
              for (k=p3; k<q3; k++)
              {
                datearry = ("i"+"j"+"k");
              }
            }
          }
        }
     alert(datearry);
  }
  </Script>
Я не получил ожидаемого результата, кто-нибудь, пожалуйста, дайте несколько советов или даже код, который работает, спасибо.

1 Ответ

0 голосов
/ 25 апреля 2020

Ваш код имеет ряд проблем:

 function()
    {

Синтаксическая ошибка, объявления функций требуют имя функции.

 datearry = ("i"+"p2"+"p3");

datearray инициализирован как массив, но здесь назначается строковый литерал (буквально "ip2p3"). Вы, вероятно, имели в виду:

datearray.push(String(i) + p3 + p3);

, который добавит строку, подобную «26042020» в первый раз, однако, по мере того, как алгоритм прогрессирует, а строки превращаются в числа, вы начнете получать значения, подобные «152020» на 1 марта 2020 года. Таким образом, вам понадобятся некоторые отступы и, возможно, разделитель, чтобы получить «01-05-2020» и соответствовать формату ввода.

Наконец, код, по-видимому, некорректно приспосабливает переходы через Границы месяца и года. Исправление, которое действительно бесполезно, так как это намного сложнее, чем нужно, или я готов беспокоиться, поскольку есть гораздо более простые альтернативы. : -)

Если вы ищете массив временных меток между двумя датами, одна из стратегий состоит в том, чтобы преобразовать временные метки в даты, тогда l oop в требуемом диапазоне, сохраняя требуемые выходные метки времени в массиве. .

Существующие вопросы касаются того, как анализировать строку даты и , как форматировать дату . Вы можете собрать их вместе, чтобы создать что-то вроде следующего:

// startDate, endDate in format dd-mm-yyyy
// Return array of dates inclusive of start and end in same format
function getDateRange(startDate, endDate) {
  // Parse dd-mm-yyyy
  let qParse = s => {
    let [d, m, y] = s.split(/\D/);
    return new Date(y, m-1, d);
  };
  // Format date as dd-mm-yyyy
  let qFormat = d => {
    let z = n => (n<10? '0' : '') + n;
    return z(d.getDate())+'-'+z(d.getMonth()+1)+'-'+d.getFullYear();
  }
  // Setup for loop
  let start  = qParse(startDate);
  let end    = qParse(endDate);
  let result = [];
  // Loop from start to end, incrementing
  // the start date and writing to result array
  do {
    result.push(qFormat(start));
    start.setDate(start.getDate() + 1);
  } while (start <= end)
  
  return result;
}

console.log(getDateRange('26-02-2020','03-03-2020'));
// Different delimiters in input
console.log(getDateRange('28.12.2020','03/01/2021'));

Вы также должны подтвердить ввод. Функции parse и format закрыты в функции, так как они предназначены только для работы с указанным c форматом OP (то есть они не являются общими функциями синтаксического анализа или форматирования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...