0

基本的に、このスクリプトを修正する必要があります。修正しようとしましたが、-1日が返されます。ここで新しいスクリプトを見ることができます-

function calculatePrice(startDate, endDate, bike) {                           
    if(cars != "no") {
      console.log(startDate);
      console.log(endDate);
      var currentSeason = getSeason(startDate);
      var totalPrice = 0;
      var daysInSeason = 0;
      var currentDate = startDate;         
      var tierss = "";     
      var now = startDate;           
      var daye = 0;
      while(now <= endDate) {
        var season = getSeason(currentDate);
        daye++;
        now.setDate(now.getDate() + 1);    
      }
      if(daye <= 3) tierss = "t1";
      else if (daye <= 8) tierss = "t2";
      else tierss = "t3"                                    
      while (currentDate <= endDate) {                     
          var season = getSeason(currentDate);
          if (season != currentSeason) {
              totalPrice += getPrice(bike, currentSeason, daysInSeason, tierss);
              currentSeason = season;
              daysInSeason = 0;
          }
          daysInSeason++;
          console.log('days in season - ' + daysInSeason);
          currentDate.setDate(currentDate.getDate() + 1);
      }                                                
      totalPrice += getPrice(bike, currentSeason, daysInSeason, tierss);
      return totalPrice;
    }
    else {
      totalPrice = 0;
      return totalPrice;
    }
}

これは-1を返し、これはすべてを正常に返すスクリプトです-

function calculatePrice(startDate, endDate, bike) {                           
  if(cars != "no") {
    console.log(startDate);
    console.log(endDate);
    var currentSeason = getSeason(startDate);
    var totalPrice = 0;
    var daysInSeason = 0;
    var currentDate = startDate;
    while (currentDate <= endDate) {
        var season = getSeason(currentDate);
        if (season != currentSeason) {
            totalPrice += getPrice(bike, currentSeason, daysInSeason);
            currentSeason = season;
            daysInSeason = 0;
        }
        daysInSeason++;
        currentDate.setDate(currentDate.getDate() + 1);
    }
    totalPrice += getPrice(bike, currentSeason, daysInSeason);
    return totalPrice;
  }
  else {
    totalPrice = 0;
    return totalPrice;
  }
}

スクリプトを編集する必要があるのはなぜですか?単純に、現在のシーズンの日数を返すためですが、totalPriceの現在のシーズンの合計日数と日数を含める必要があります。または、上記のように、getpriceにティアを含める必要がある可能性もあります。どちらも機能するはずです。

助けを聞くことを願っています:)!

4

1 に答える 1

0

「now」と「startDate」がオブジェクトの場合、呼び出すたびに

now.setDate(something)

また、startDate ...を変更します。これは、nowとstartDateが同じオブジェクトを指すポインターであるためです。

startDateを使用している場所がわからないため、エラーの原因かどうかはわかりませんが、たとえば、呼び出し元で変更されている可能性があります。

編集:はい、それはあなたの問題です、currentDate、now、およびstartDateはすべて同じ日付オブジェクトを指しているので、2番目のwhileループは実行されません。

于 2012-04-18T16:25:52.727 に答える