1

我需要将表示自 01.01.1601(截至 2012 年 11 月 6 日:150422)以来的天数的整数转换为 javascriptDate对象。

每年大约有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 日午夜开始计算。new Data().getTime()例如,如果您这样做,您将返回从该点开始的毫秒数。因此,要转换从 1601 年 1 月 1 日开始的日期,您需要计算 1601 年 1 月 1 日和 1970 年 1 月 1 日之间的确切毫秒数,并取您的日期的差值(也转换为毫秒)。

这样,您所做的就是将数字相加,并且不会因您的近似值而出现任何浮点不准确或错误。

于 2012-11-06T16:44:37.643 回答