0

ブログ投稿で見つけたこのコードと、 http://keith-wood.name/countdown.htmlを使用して繰り返される 24 時間のカウントダウン タイマーがあります。私の使用目的は翌日配達の締め切りなので、締め切りの午後 4 時を過ぎるとタイマーがリセットされます。週末は翌日配達ができないため、金曜日、土曜日、日曜日の場合はタイマーを調整して計算します。

この JsFiddle は、週末を除く毎日午後 4 時までカウントダウンするデモを示しています: https://jsfiddle.net/u3t2n9jk/6/

私の問題

締め切りを午後 4 時から午後 3 時に変更する必要があるだけです。何らかの理由で var の締め切り = 16 を 15 (24 時間時計) に変更すると、金曜日、土曜日、日曜日の計算が壊れます。正しく動作させるために他に何をする必要がありますか?

function nextDay() {
  var target = new Date();
  var deadline = 16; // Set 4pm/16:00hrs dispatch deadline

  if (target.getHours() < deadline || (target.getHours() == 15 && target.getMinutes() == 59 ) ) {

      console.log('Before deadline ' + target.getMinutes());

      if ( target.getDay() == 5 && target.getHours() == 16  && target.getSeconds() > 1 ) { // For Friday After 4PM
        target.setHours(88, 0, 0, 0);
      }
      else if ( target.getDay() == 6  ) { // For Saturday
        target.setHours(64, 0, 0, 0);
      }
      else if ( target.getDay() == 7  ) { // For Sunday
        target.setHours(30, 0, 0, 0);
      }
      else {
        target.setHours(deadline, 0, 0, 0);
      }

    } else if (target.getHours() > deadline  || (target.getHours() == deadline && target.getMinutes() >= 0)   )  {
         console.log('After deadline ' + target.getMinutes());

        if ( target.getDay() == 5 && target.getHours() == 16  && target.getSeconds() > 1 ) { // For Friday After 4PM
                 target.setDate(target.getDate() + 1);
                 target.setHours(88, 0, 0, 0);
              }
              else if ( target.getDay() == 6  ) { // For Saturday
                 target.setDate(target.getDate() + 1);
                 target.setHours(64, 0, 0, 0);
              }
              else if ( target.getDay() == 7  ) { // For Sunday
                 target.setDate(target.getDate() + 1);
                 target.setHours(30, 0, 0, 0);
              }

              else {
                 target.setDate(target.getDate() + 1);
         target.setHours(deadline, 0, 0, 0);
              }

    }

  return target;
}
4

1 に答える 1

0

同僚の助けを借りて、その背後にあるロジックを書き直すことになりました。このコードをコピーして貼り付けて機能させることができますが、 jQuery Countdown プラグインも必要になることに注意してください。

function nextDay() {
var target = new Date();
var hours_now = target.getHours();
target.setHours(15);
target.setMinutes(0);
target.setSeconds(0);

// target is 3 today

if ( target.getDay() == 5 && hours_now >= 15 ) { // For Friday After 3PM
    target.setDate(target.getDate() + 3); // target is 3 on Monday
}
else if ( target.getDay() == 6  ) { // For Saturday
    target.setDate(target.getDate() + 2); // target is 3 on Monday
}
else if ( target.getDay() == 0 ) { // For Sunday
    target.setDate(target.getDate() + 1); // target is 3 on Monday
}
else if (hours_now >= 15){ // Any other day and after deadline
    target.setDate(target.getDate() + 1); // target is 3 Tomorrow
}
return target;
}

function reset() {
window.location.reload();
}

$('#timer').countdown({
until: nextDay(),
onExpiry: reset,
expiryText: '<div class="end">You have missed todays dispatch.</div>',
labels: ['Years', 'Months', 'Weeks', 'days', 'hrs', 'min', 's'],
labels1: ['Year', 'Month', 'Week', 'day', 'hr', 'min', 's'],
format: 'HMS'
});
于 2016-03-17T09:29:08.887 に答える