1

特定の日付からの月曜日の数を示すカウントアップをコーディングしようとしています。

たとえば、2012 年 10 月 1 日以降、今日の 10 月 25 日まで 4 つの月曜日がありました。

この最初のステップは、いくつかの場所からコーディングを検索し、それを自分のニーズに適応させることで達成できました。

今から次の月までの残りのパーセンテージを示すカウントアップを表示して、別の月曜日をメインカウンターに増やす方法を作るのが難しい部分です。

たとえば、2012 年 10 月 1 日から今まで 4 つの月曜日がありましたが、10 月 25 日は木曜日なので、次の月曜日に到達するために残っている値で時間が増加することを示すカウントアップを行うにはどうすればよいでしょうか?

日、時間、分、秒を使用してカウントアップしようとしたので、実行するたびに今日から開始し、値は次の月曜日までカウントアップされるため、週ごとにカウンターに次のような数値が表示されます: 6 日23 時間 59 分 59 秒を計算し、月曜日の数に新しい数字を追加して、6 日後に新しい月曜日を達成しましたが、もちろん、途中でコードを実行しているページにアクセスすると、値が追加されたカウンターが既に表示されます。それとライブで毎秒カウントします。

誰か助けてくれませんか?同じ目標を達成するためのより良い方法を知っていれば、まったく問題ありません。

私が実現したいことを要約すると、月曜日が何日経過したか、次の月曜日までの残り時間をライブでカウントアップするカウンターです。次の月曜日に止まらないようにずっと続けなければならず、次の月曜日を達成したら、次の月曜日まで続けなければなりません。

質問は大歓迎です!

<pre><code>


// This Code Counts how many mondays from a specified date to the actual date.
// Create a new date variable
var d = new Date();
var month = d.getMonth() + 1;
var day = d.getDate();

// Get the actual date and store on a variable
var actualDate = d.getFullYear() + '/' + (('' + month).length < 2 ? '0' : '') + month + '/' + (('' + day).length < 2 ? '0' : '') + day;

// Set dates start and get actual date
var date1 = new Date('10/01/2012'); // Set the begninning date here
var date2 = new Date(actualDate);

var monday = Math.abs(date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24 * 7);
monday -= 0.1;
monday = Math.floor(monday);
monday *= 1;

if (date1.getDay() == 1) monday += 1;
if (date2.getDay() == 1) monday += 1;

//$('').html(monday);
$("#showMondays").text(monday);

</pre></code>

これは、月曜日のカウンターです: http://jsfiddle.net/hRaAF/

ありがとうございました!

4

1 に答える 1

0

次のコードをフィドルに追加しました。ここで機能していることがわかります。

var nextMonday = function(now) {
    var day = now.getUTCDay();
    var next = new Date();
    next.setDate(next.getDate() + (7 - day));
    next.setHours(0);
    next.setMinutes(0);
    next.setSeconds(0);
    return next;
};

var SECS = 1000;
var MINS = 60 * SECS;
var HOURS = 60 * MINS;
var DAYS = 24 * HOURS;

var countDown = function() {
    var now = new Date();
    var next = nextMonday(now);
    var difference = Math.abs(next - now);

    var days = Math.floor(difference / DAYS);
    difference = difference % DAYS;
    var hours = Math.floor(difference / HOURS);
    difference = difference % HOURS;
    var minutes = Math.floor(difference / MINS);
    difference = difference % MINS;
    var seconds = Math.floor(difference / SECS);

    var text = days + ' days ' + hours + ' hours ' + minutes + ' minutes ' + seconds + ' seconds ';

    $('#count').text(text);
    setTimeout(countDown, 1000);
};

countDown();
setTimeout(countDown, 1000);

編集

これが変更されたコードです。特定の月曜日以降の月曜日の数を計算する以前のコードを削除し、より単純なバージョンに置き換えました。javascriptが現在の日付の値を取得する場所であるため、コンピューターの日付と時刻を変更してテストできます。

var begin = new Date('10/01/2012');

var SECS = 1000;
var MINS = 60 * SECS;
var HOURS = 60 * MINS;
var DAYS = 24 * HOURS;
var WEEKS = 7 * DAYS;

var countMondaysFrom = function(begin) {
    var difference = Math.abs(new Date() - begin);
    var days = Math.floor(difference / WEEKS);
    return days;

};

var lastMonday = function(now) {
    var day = now.getUTCDay() - 1;
    day = day < 0 ? 6 : day;
    var last = new Date();
    last.setDate(last.getDate() - day);
    last.setHours(0);
    last.setMinutes(0);
    last.setSeconds(0);
    return last;
};

var countUp = function() {
    var now = new Date();
    var last = lastMonday(now);
    var difference = Math.abs(now - last);

    var days = Math.floor(difference / DAYS);
    difference = difference % DAYS;
    var hours = Math.floor(difference / HOURS);
    difference = difference % HOURS;
    var minutes = Math.floor(difference / MINS);
    difference = difference % MINS;
    var seconds = Math.floor(difference / SECS);

    var text = days + ' days ' + hours + ' hours ' + minutes + ' minutes ' + seconds + ' seconds ';

    $('#count').text(text);
    $("#showMondays").text(countMondaysFrom(begin));
    setTimeout(countUp, 1000);
};

countUp();
setTimeout(countUp, 1000);​
于 2012-10-25T19:54:33.863 に答える