1

5分ごとにカウントダウンを実行するようにスクリプトを変更しようとしています。現在、getCountDown()関数は12時間ごとにカウントダウンするように設定されています。5分ごとにカウントダウンするようにこの時間形式を変更する方法がわからないようです。変更する必要のある機能はこちら

function getCountDown() {
var until = getGMT();
until.setHours(until.getHours() < 12 ? 12 : 24, 0, 0, 0); // Next midday or midnight
return until;

function getGMT() {
var now = new Date();
now.setMinutes(now.getMinutes() + now.getTimezoneOffset() - 0 * 60); // GMT is UTC-0
return now;

}

私のjsスキルは非常に限られているので、どんな助けでも大歓迎です。

4

1 に答える 1

1

注:この回答は、ポスターを解決策に導き、JSをよりよく理解することを目的としており、解決策を提供することを目的としたものではありません。

現在のコードが機能する方法は、最初に日付オブジェクトを取得し、次にそのオブジェクトの時刻を24:00(次の深夜)または12:00(次の正午)に設定することです。これは、現在の時間の値がその時間に対して何であるかをチェックすることによって解決されます(<12は正午が次であり、それ以外の場合は真夜中が次であることを意味します)。次に、カウントダウンが実行されるように設計されていると私が推測する日付を示す、新しく変更された日付オブジェクトを返します。

したがって、問題の核心は、別の日付オブジェクトを返す必要があることです。つまり、分を選択したものに設定します(秒とミリ秒を0に設定します)。

やりたいことについては、DateオブジェクトでgetMinutes関数とsetMinutes関数を使用して現在の日付を確認し、適切な分(および秒とミリ秒の値)を設定する必要があります。もちろん、現在の時刻が01:59の場合は、時間を変更して02:00にする必要がある場合があります。そのため、実際にはsetHoursを使用することもできます(これにより、時間と分を設定できるため)。

あなたの新しい議事録の値が何であるかを理解することは、うまくいけばあなたができることになるでしょう。あなたは最も近い5に切り上げて、あなたが1時間に切り上げている上記の状況に適切に対処する必要があります。

これらの上記の方法に関するドキュメントは、msdnサイトにあります。

編集してコードを追加します

var hours = until.getHours();
var minutes = until.getMinutes();
var targetMinutes = Math.ceil((minutes+1)/5)*5;
if (targetMinutes==60)
{
    targetMinutes = 0;
    hours = hours+1;
}

until.setHours(hours, targetMinutes, 0, 0);

上記をもう少し効率的に書くことができるかもしれませんし、真夜中のような境界の周りでそれが何をするかを適切にチェックする必要があるかもしれません(それはうまくいくようですが、常にコードを徹底的にテストする必要があります)。うまくいけば、あなたはそれが何をしているのかを理解することができます。:)

于 2012-07-16T16:57:22.910 に答える