日期:2014-05-16  浏览次数:20734 次

求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>