1

01.01.1601 (2012 年 11 月 6 日現在: 150422) からの日数を表す整数を JavaScriptDateオブジェクトに変換する必要があります。

1 年はおよそ365.242199日なので、計算は次のようになります。

var daysPerYear = 365.242199;
var daysSince = 150422;

var year = 1601 + Math.floor(daysSince / daysPerYear); // correct, gives me 2012
var days = Math.floor(daysSince % daysPerYear); // wrong, gives me 307

Date次に、オブジェクトを作成します。

var date = new Date(year, 0);
date.setDate(days);

現在のdateポイント'Fri Nov 02 2012 00:00:00 GMT+0100 (CET)'は約 4 日ずれています。

私の計算のどこが間違っていますか? Dateオブジェクトを取得する簡単な方法はありますか?

4

2 に答える 2

1

OpenCOBOL 1.1 のコピーを複製し、計算のためにlibcob/intrinsic.cを調べます。

特にcob_intr_date_of_integerを参照してください。

SVN 読み取り専用チェックアウトの場合

svn checkout svn://svn.code.sf.net/p/open-cobol/code/trunk open-cobol-code

または参照する

http://sourceforge.net/projects/open-cobol/files/open-cobol/1.1/open-cobol-1.1.tar.gz/download
于 2012-12-03T19:29:53.280 に答える
0

JavaScript の日付は、1970 年 1 月 1 日の午前 0 時から回転します。new Data().getTime()たとえば、そうすると、その時点からのミリ秒数が返されます。したがって、1601 年 1 月 1 日からの日付を変換するには、1601 年 1 月 1 日から 1970 年 1 月 1 日までの正確なミリ秒数を計算し、日付との差を取る必要があります (これもミリ秒に変換されます)。

この方法では、数値を加算するだけで、浮動小数点の不正確さや近似によるエラーに悩まされることはありません。

于 2012-11-06T16:44:37.643 に答える