求js计算:指定日期是从1900-1-1后第几天?
为了实现用js导出数据到 Excel(非OLE方法),研究了一下excel 保存为 htm 文件的格式,发现对于日期比较难搞,比如下面:
<style>
.tv { mso-number-format: "\@ "; }
.dv { mso-number-format: "yyyy-mm-dd "; }
</style>
<table x:str border=0 ...>
<tr>
<td class= "tv "> scsladc </td>
<td x:num> 1231 </td>
<td class= "dv " x:num= "39257 "> 2007-6-24 </td>
</tr>
<tr>
<td class= "tv "> 141234324321421343214213423143214 </td>
<td x:num> 1231 </td>
<td class= "dv " x:num= "39258 "> 2007-6-25 </td>
</tr>
</table>
日期光定义格式还不行,如果没有“x:num= "39257 "”,用Excel打开后,第3列还不是真正的日期类型,比如不能筛选,排序,非要在格子中双击下,才正真变成日期类型,如果有“x:num= "39257 "”则一切正常。
39257,39258 是如何计算出来的呢?Excel Help 的说法是该日期从 1900-1-1 起的顺序数(1900-1-1 为 1),于是在 js 中计算:
var d0 = new Date(1900,1,1).getTime();
var d1 = new Date(2007,6,24).getTime();
alert( (d1-d0)/(24*60*60*1000) +1 );
发现结果为 39255 ,根本就不对,试了很多日期,基本上都差 1-3 天,请问那位高人可以帮忙解决这个?谢谢了!
------解决方案-------------------- 1900年1月1日的应该是
new Date(1900,0,1)月份是从0开始的
------解决方案-------------------- <body>
<script type= "text/javascript ">
<!--
// 首先指出,JS 中月份是从 0 开始计算的,即 0-11 表示 1-12 月份
// 因此 1 月对应 0,6 月对应 5
var d0 = new Date(1900,0,1).getTime();
var d1 = new Date(2007,5,26).getTime();
alert( (d1-d0)/(24*60*60*1000)+1); // 39256 ? 始终差 1
//-->
</script>
</body>