什么相当于javascript中的DateTime.ToOADate()?

Mo *_*our 3 javascript c#

如何在javascript中获取OADate(OLE自动化日期)?我需要以double值的形式传递我的日期对象(到我的Web服务).

在c#中:

var d = DateTime.Now.ToOADate();
Run Code Online (Sandbox Code Playgroud)

js中的等价物是什么?

Eri*_*ert 9

要将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


SLa*_*aks 5

如果您无法修改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)

(另)

  • 哇埃里克.所以有人可以在接受采访时从头顶喷出这种类型的东西,因为你遇到了这个问题,并想出如何纠正它,但是他们没有预见到在你的采访中你会有他们......你的屁股 (6认同)