如何在javascript中获取OADate(OLE自动化日期)?我需要以double值的形式传递我的日期对象(到我的Web服务).
在c#中:
var d = DateTime.Now.ToOADate();
Run Code Online (Sandbox Code Playgroud)
js中的等价物是什么?
要将JScript日期转换为OLE自动化日期,请调用getVarDate:
http://msdn.microsoft.com/en-us/library/4d4x3w61(VS.85).aspx
(如果你采用另一种方式 - 也就是说,你有一个JScript对象并且你分配了一个包含VT_DATE类型变体的属性 - JScript引擎应该自动将它转换为等效的JScript日期.)
如果您的浏览器提供者没有按照编写getVarDate方法的方式来做,那么自己编写代码并不困难,但为了使所有情况正确,您必须处理一些涉及日期之前的特殊情况.时代.
我知道得到正确的代码,最好的方法是先将其转换为原始号码的完整和部分日以来的时代,这是我注意的是十二月的午夜30,而不是31 1899年,一旦你有,你就可以特殊情况下的纪元前值.
四舍五入要非常小心!我建议您在转换为OA格式之前将值舍入到最接近的秒.因为OA格式是-19999999就在1899年12月30日午夜之前,但是-2.0是12月28日午夜,如果你将前者围绕到后者,你只需将一小部分时间缩短为两天误差.
有关OA格式怪癖的详细信息,请参阅2003年关于此主题的文章:
http://blogs.msdn.com/b/ericlippert/archive/2003/09/16/53013.aspx
有趣地看看这个奇怪日期格式的更深层历史,请参阅Joel关于他的微软时代的文章:
http://www.joelonsoftware.com/items/2006/06/16.html
如果您无法修改Web服务,则必须重新实施ToOADate().
MSDN说,
OLE自动化日期被实现为它的整体部件是前或午夜后的天数一个浮点数,1899年12月30日,并且其小数部分表示由24划分.例如,当天的时间,午夜,12月31日1899代表1.0; 1900年1月1日上午6点由2.25表示; 1899年12月29日午夜以-1.0表示; 1899年12月29日上午6点用-1.25表示.
因此,你应该能够写出类似的东西
var oaDate = (date - new Date(1899, 11, 31)) / (24 * 60 * 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
(另)
| 归档时间: |
|
| 查看次数: |
6509 次 |
| 最近记录: |