Сломанный калькулятор оценки доставки - PullRequest
0 голосов
/ 07 февраля 2020

Я надеюсь, что кто-то может помочь мне выяснить, как закодировать приложение, которое позволяет вам выбрать дату рассылки с помощью jquery datepicker, выбрать стандартную или первоклассную доставку из выпадающего списка и вычислить приблизительную дату доставки (7-12 дней для стандарта, 3-5 дней для первого класса).

Я работал, когда «Дни рассылки» [число] «Дни» принимали строковый ввод, но затем он прерывался, когда я добавлен код для средства выбора даты.

Мне также нужно исключить выходные и праздничные дни из расчета доставки.

Вот ссылка на полную ручку: https://codepen.io/allyjfuller/pen/oNXvwJL

$('#calculateShippingEstimate').click(function( event ) {
  
  //Prevent button from 'submitting' and reloading the page
  event.preventDefault();
  
  //Capture the mailing date
  var $mailingDate = $("#mailingDate").val();
  
  var $postageType = $("#postageType").val();
  var $shipStateShippingDuration = eval('data.shipTimes.' + $postageType);  
  var $totalShippingTime = parseInt($mailingDate) + parseInt($shipStateShippingDuration);
  
  //Create the date
  var date = new Date();
  var month = date.getMonth()+1;
  var day = date.getDate() + parseInt($totalShippingTime);
  var year = date.getFullYear();
<form>
  <section>
    <label>Mailing on</label>
    <input id="mailingDate" placeholder="number"></input>
  </section>
  <section>
    <label>Postage:</label>
    <select id="postageType">
      <option value="Standard">Standard</option>
      <option value="FirstClass">First-Class</option>
    </select>
  </section>
  <input class="button" id="calculateShippingEstimate" type="submit" value="Get Estimated Delivery Date"></input>
  <div class="results"></div>
</form>

1 Ответ

0 голосов
/ 07 февраля 2020

Просматривая фрагмент кода, кажется, что вы пытаетесь вручную прокрутить множество функций, которые уже существуют в рамках JS Date.

Как только вы получите дату начала и количество дней для доставки, вы можете добавить эти дни вместе, чтобы создать окончательную дату доставки. Оттуда и внутри oop вы можете go день за днем ​​и проверять, является ли текущий индекс даты рабочим днем ​​или нет (используя Date.getDay ()).

С этим вы можете проверить субботу [6] и воскресенье [0], а затем добавить дни, необходимые в дополнение к окончательной дате.

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

Функция addDays взята из здесь . Это добавляет некоторое объяснение, которое, я думаю, вы найдете полезным.

function addDays(date, days) {
 const copy = new Date(Number(date))
 copy.setDate(date.getDate() + days)
 return copy
}

// FINAL SHIPPING ESTIMATE

$('#calculateShippingEstimate').click(function( event ) {
  event.preventDefault();
  let mailingDateVal = $("#mailingDate").val();
  let shippingDuration = data.shipTimes[$("#postageType").val()];
  let mailingDate = new Date(mailingDateVal);

  console.log("final Date: " + addDays(mailingDate, shippingDuration));

  let finalDate = addDays(mailingDate, shippingDuration)

  let mailingDateIndex = new Date(mailingDate);
  while(mailingDateIndex <= finalDate) {
    console.log("current mailDateIndex: " + mailingDateIndex)

    if (mailingDateIndex === finalDate) {
     break;
    }

    // Weekend
    console.log(mailingDateIndex.getDay());
    if (mailingDateIndex.getDay() == 0 || mailingDateIndex.getDay() == 6) {
      console.log("weekend day hit! Adding day to final...")
      finalDate = addDays(finalDate, 1);
    }
    mailingDateIndex = addDays(mailingDateIndex, 1);
  }
});
...