0

開始日と日数から日付を計算しようとしているので、基本的には開始日に日数を足して終了日を取得します。問題は、私がいくつかの奇妙な結果を得るということですが、たった1つの日付で、私はこれを理解しようとして数日経ちました。

関数は次のとおりです。

CallculateDateFromDays = function(startDate, days) {
var policy_start_date_array = startDate.split("-");
var policy_start_date = new Date(policy_start_date_array[2], policy_start_date_array[1]-1, policy_start_date_array[0]);
var policy_start_date_add = new Date(policy_start_date.getTime() + ((days-1) * 24 * 60 * 60 * 1000));
var dateString = ("0" + (policy_start_date_add.getDate())).slice(-2) + "-" + ("0" + (policy_start_date_add.getMonth()+1)).slice(-2) + "-" + policy_start_date_add.getFullYear();
return dateString;}

日付「28-10-2012」を使用するまでは機能しますが、2日追加しても同じ日付に戻ります。

どんなアイデアでも、私は困惑しています。

4

4 に答える 4

2

10月28日に、時刻がDSTから「通常」に変更されるため、日は24時間と等しくなりません。コードに問題が発生する可能性があります。

また、なぜ(days-1) * 24 * 60 * 60 * 1000ですか?式全体に設定daysすると、ゼロと評価されます...1

于 2012-10-14T19:40:33.310 に答える
2

夏時間の終了により、ローカルタイムゾーンが変更される可能性があります。

> new Date(2012, 9, 28)
Sun Oct 28 2012 00:00:00 GMT+0200
> // 48 hours later:
> new Date(new Date(2012, 9, 28) + 2 * 24 * 60 * 60 * 1000)
Mon Oct 29 2012 23:00:00 GMT+0100

常にUTCメソッドを使用してください!

ところで、日数の追加は、タイムゾーンの問題を回避することではるかに簡単になりsetDateます。

function calculateDateFromDays(startDate, days) {
    var datestrings = startDate.split("-"),
        date = new Date(+datestrings[2], datestrings[1]-1, +datestrings[0]);
    date.setDate(date.getDate() + days);
    return [("0" + date.getDate()).slice(-2), ("0" + (date.getMonth()+1)).slice(-2), date.getFullYear()].join("-");
}
于 2012-10-14T19:42:36.203 に答える
1

それを達成するためのより簡単な方法があります:http: //jsfiddle.net/pjambet/wZEFe/2/

于 2012-10-14T19:40:07.373 に答える
0

javascriptの日付形式を使用します。

JavaScriptの日付をフォーマットする方法

したがって、日付文字列を手動で解析する必要はありません。

于 2012-10-14T19:39:51.180 に答える