2

私は問題を抱えており、誰かが私にその理由について少し洞察を与えることができるかどうか疑問に思っていました。次のコードは、日付に1週間を追加するために機能しています。

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = (c.getStamp() + 604800).toDate();
}

...

Date.prototype.getStamp = function() {
    return Math.round(this.getTime() / 1e3);
};

Number.prototype.toDate = function() {
    return new Date(this * 1e3);
};

私は以下を機能させようとしていますが、それは継続的なループを作成します:

while (c.getStamp() < b.getStamp()) {
    var f = this.getWeek(c);
    e.push(f);
    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
}

どこc = JS Date, ie 05/01/12でそしてb = JS Date, ie 05/31/12

4

3 に答える 3

5

()あなたは後を逃したc.getDate

それとは別に、あなたはこれを行うことができます:

c.setTime(c.getTime()+7*24*60*60*1000); // adds 1 week to the date
于 2012-05-31T02:15:40.367 に答える
3

日付に週を追加するには、最も簡単な方法は7日を追加することです。

var now = new Date();

// add one week exactly
now.setDate(now.getDate() + 7);

ミリ秒単位で7*24時間に相当するものを追加すると、週が夏時間の境界を超える場合は正しくありません。そして、上記はコードで少し明確です。

あなたのコードでは:

> while (c.getStamp() < b.getStamp()) { 

cdが両方とも日付オブジェクトである場合、次のようになります。

while (c < b) {

より効率的で、エラーが発生しにくく、書き込みが少なくなります。

>      var f = this.getWeek(c);  

fですか?何がf.getWeek返されますか?

>      e.push(f);
>      c = (c.getStamp() + 604800).toDate();   

おそらく、cに1週間を追加したいので、次のようにします。

  c.setDate(c.getDate() + 7);

後で...

>    c = new Date(c.getFullYear(), c.getMonth(), c.getDate + 7, 0, 0, 0);
> --------------------------------------------------------^

構文エラーがあり、ミリ秒をゼロにしていません。これは、1週間までのさらに長い道のりのcようです。上記を参照してください。

ここで、c = JS日付、つまり05/01/12およびb = JS日付、つまり05/31/12

これは国際フォーラムでは、地域固有の表現を使用する場合は避けるか説明する必要があることに注意してください。上記は米国固有のmm/dd / yyyy形式ですか?より広く認識されている形式は、ISO8601形式を使用するためのdd / mm / yyyy以上です:yyy-mm-dd(ES5に準拠するすべてのブラウザーでネイティブにサポートされるはずですが、まだすべてではありません)。

ああ、getStampそしてtoDateメソッドは最も近い秒に丸めようとする試みのようです。あなたは一度にそれをする関数を試すかもしれません:

Date.prototype.roundToSecond = function() {
  this.setMilliseconds(this.getMilliseconds() > 499? 1000 : 0);
}
于 2012-05-31T03:26:25.093 に答える
0

Kolinkには正しい答えがありますが、日付の操作と書式設定で多くの作業を行う場合は、 Moment.jsの日付ライブラリも確認することをお勧めします。

于 2012-05-31T02:19:06.063 に答える