ANSI日期(COBOL整数日期)到当前日期

时间:2012-11-06 16:27:20

标签: javascript date

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

每年大约有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对象?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

JavaScript日期从1970年1月1日午夜开始。例如,如果您执行new Data().getTime(),则会返回从该点开始的毫秒数。因此,要转换1601年1月1日的日期,您需要计算1/1/1601和1/1/1970之间的确切毫秒数,并从您的日期(也转换为毫秒)中获取差异。

这样,你所做的只是将数字加在一起,不会受到任何浮点不准确或近似错误的影响。