0

私は、Visual Foxpro で作成されたレガシ アプリケーション用の Web ポータルを作成する任務を負っています。妊娠予定日を確認する必要があります。ルールとして、現在の日付から 9 か月を超えることはできません。これはあまりにも漠然としていて、数日または数週間で終わる必要があると私はすでに主張しようとしましたが、レガシー ソフトウェアを模倣する必要があると言われました。

VSP のコードは次のように実行されます。

maxValueForDueDate = GOMONTH(DATE() , 9)

MSDN によるとGOMONTH()、エッジ ケースは次のように処理されます。

SET CENTURY ON
STORE GOMONTH({^1998-02-16}, 5) TO gdDeadLine

CLEAR
? gdDeadLine  && Displays 07/16/1998
? GOMONTH({^1998-12-31}, 2)  && Displays 02/28/1999
? GOMONTH({^1998-12-31}, -2)  && Displays 10/31/1998

ご覧のとおり、12 月 31 日に 2 か月足しても 3 月 2 日にはなりません。

var dDate = new Date('1998-12-31');
dDate.setMonth(dDate.getMonth() + 2);
alert(dDate.toDateString()); // results in - Tue Mar 02 1999

このシナリオ用に作成した便利な JavaScript 関数を持っている人はいますか? グーグルで検索しましたが、必要なものが見つかりませんでした。サードパーティの使用は JQuery に制限されています。

4

2 に答える 2

1

2つの「完全な月」(つまり、30日x 24時間)のミリ秒数(または秒または時間または日)を追加します。アイデアは、単一の[月]コンポーネントだけでなく、日付全体がシフトされるということです。

var a = new Date('1998-12-31')
var ms_in_month = 30 * (24 * 60 * 60) * 1000
var b_ticks = (+a) + 2 * ms_in_month
var b = new Date(b_ticks)
alert(b) // Sun Feb 28 1999 16:00:00 GMT-0800 (Pacific Standard Time)

(+a)日付をエポックからのミリ秒数になる数値に強制します。(これはa.millisecondsと書くこともできます)。次にnew Date(millis_since_epoch)、逆の操作を行い、エポックオフセットから日付を作成します。

免責事項:正確なルールが何であるかはGOMONTHわかりません。「1か月のヒューリスティックで30。5日」(365/12 = 30.41)または別のバリエーションを使用する可能性があります。月の期間(ドキュメントには「-1 [月]は-31日を意味する」と記載されています)またはうるう年は考慮されていないようです

于 2012-08-13T19:16:42.513 に答える
0

オープン ソースの javascript 日付ライブラリDatejsを見ることができます。

このファイルを追加できない場合は、少なくともコードを見て、エッジ ケースがどのように処理されるかを確認できます。

于 2012-08-13T19:04:08.467 に答える