1

誰か私に以下のコードを説明してもらえますか?

たとえば、今日の日付を今日 (2012 年 11 月 21 日) に設定し、終了日を 12 月 3 日に設定したいと思います。

この理由は、アイテムのリストをループし、それらが「過去」、「現在」、または「未来」にあるかどうかを判断し、それに応じてクラスを割り当てたいためです。

これが理にかなっていることを願っています!どんな助けでも大歓迎です!

function daysTilDate(expiredate){

    expiredate ="12/"+expiredate+"/2012";

    var thisDay=new Date(expiredate);

    var CurrentDate = new Date();

    var thisYear=CurrentDate.getFullYear();

    thisDay.getFullYear(thisYear);

    var DayCount=(thisDay-CurrentDate)/(1000*60*60*24);

    DayCount=Math.round(DayCount);

    return DayCount;
}
4

3 に答える 3

2

有効期限までの日数を計算する場合は、以下のようにメソッドを簡略化できます。試験日を指定しない場合は、当日が試験日となりますのでご注意ください。

​function ​daysTilData(expireDate, testDate) {

    if(typeof testDate === "undefined"){
        testDate = new Date(); // now        
    }

    var diff = expireDate - testDate;

    // minus value meaning expired days
    return Math.round(diff/(1000*60*60*24));
}

alert(daysTilData(new Date("12/31/2012")));
// result 40

alert(daysTilData(new Date("12/31/2012"), new Date("1/12/2013")));
// result -12
于 2012-11-21T16:43:44.493 に答える
1

コードを確認するつもりはありませんが、「アイテムのリストをループして、アイテムが過去、現在、または未来にあるかどうかを判断したい」という質問に答えることができます。

まず、目標日を作成します。「今」の場合は、new Date() を使用してください。特定の日付の場合は、new Date(dateString) を使用します。

次に、JavaScript の Date オブジェクトには、日付の特性を返すさまざまなメンバーがあります。これを使用して日付を比較できます。したがって、配列に日付文字列があるとしましょう。

function loopDates(targetDateString, myDates) {
    var targetDate, nextDate, status, ix;
    targetDate = new Date(targetDateString);
    for (ix = 0;  ix < myDates.length;  ++ix) {
        nextDate = new Date(myDates[ix]);
        if (nextDate.getFullYear() < targetDate.getFullYear()) {
             status = "past";
        } else if (nextDate.getFullYear() > targetDate.getFullYear()) {
             status = "future";
        } else {
            // Year matches, compare month
            if (nextDate.getMonth() < targetDate.getMonth()) {
                status = "past";
            } else if (nextDate.getMonth() > targetDate.getMonth()) {
                status = "future";
            } else {
                // Month matches, compare day of month
                if (nextDate.getDate() < targetDate.getDate()) {
                    status = "past";
                } else if (nextDate.getDate() > targetDate.getDate()) {
                    status = "future";
                } else {
                    // Day matches, present
                    status = "present";
                }
            }
        }
        console.log("Date " + myDates[ix] + " is " + status + " from " + targetDateString);
    }
}

loopDates("11/17/2012", ["11/16/2012", "11/17/2012", "11/18/2012"]);

これはログに記録されます:

Date 11/16/2012 is past from 11/17/2012
Date 11/17/2012 is present from 11/17/2012
Date 11/18/2012 is future from 11/17/2012

ここで jsFiddle を使用します。

包括的な Date クラスを使用したい場合は、優れた機能を備えたオープンソースの JavaScript 日付と時刻処理ライブラリであるDateJSを使用してください。

于 2012-11-21T16:47:49.523 に答える
1

以下、行ごとの説明です。

関数宣言は...

function daysTilDate(expiredate){

expiredate パラメータを取り、先頭に "12/" を追加し、"/2012" を追加した同じ値に設定します。したがって、expiredate の値が「10」だった場合、新しい値は「12/10/2012」になります...

expiredate ="12/"+expiredate+"/2012";

期限切れの文字列を使用して、thisDay という名前の新しい Date オブジェクトをインスタンス化します...

var thisDay=new Date(expiredate);

今日の日付に等しい値を設定するデフォルトのコンストラクターを使用して、CurrentDate という名前の新しい Date オブジェクトをインスタンス化します...

var CurrentDate = new Date();

CurrentDate (以前は今日の日付に設定されていた) から Year セグメントのみを取得します...

var thisYear=CurrentDate.getFullYear();

thisDay (以前は「2012」に設定されていた) から Year セグメントを取得します...

thisDay.getFullYear(thisYear);

thisDay と CurrentDate の差をミリ秒単位で取得し、1000*60*60*24 を掛けて日数の差を取得します...

var DayCount=(thisDay-CurrentDate)/(1000*60*60*24);

以前に計算された差を丸めます...

DayCount=Math.round(DayCount);

2012 年 12 月の今日と渡された日の差を返します...

return DayCount;

}

年セグメントを取得する 2 行は無関係であることに注意してください。これらの値は使用されないためです...

于 2012-11-21T16:40:11.443 に答える