我需要将一个整数表示自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
对象?
答案 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之间的确切毫秒数,并从您的日期(也转换为毫秒)中获取差异。
这样,你所做的只是将数字加在一起,不会受到任何浮点不准确或近似错误的影响。