如何在 javascript 中获取 OADate(OLE 自动化日期)?我需要以 double 值的形式传递我的日期对象(到我的 Web 服务)。
在 C# 中:
var d = DateTime.Now.ToOADate();
js中的等价物是什么?
最佳答案
要将 JScript 日期转换为 OLE 自动化日期,请调用 getVarDate:
http://msdn.microsoft.com/en-us/library/4d4x3w61(VS.85).aspx
(如果您采用另一种方式——也就是说,您有一个 JScript 对象并且分配了一个包含 VT_DATE 类型变体的属性——JScript 引擎应该自动将其转换为等效的JScript 日期。)
如果您的浏览器提供商没有礼貌地为您编写 getVarDate 方法,那么, 自己编写代码并不难,但是为了使其适用于所有情况,您必须处理一些棘手的特殊情况,这些情况涉及纪元之前的日期。
我所知道的使代码正确的最好方法是首先将其转换为自纪元以来的整数天数和小数天数的原始天数,我注意到这是 12 月 30 的午夜,而不是 < em>31,1899。一旦你有了它,你就可以对前纪元值进行特殊处理。
四舍五入要非常小心!我建议您在转换为 OA 格式之前将值四舍五入到最接近的秒数。因为 OA 格式中 -1.9999999 是 1899 年 12 月 30 日午夜之前,而 -2.0 是 12 月 28 日午夜,如果将前者四舍五入到后者,您只是将几分之一秒四舍五入为两天的错误。
有关 OA 格式的怪癖的详细信息,请参阅我 2003 年关于该主题的文章:
http://blogs.msdn.com/b/ericlippert/archive/2003/09/16/53013.aspx
要深入了解这种奇怪的日期格式的历史,请参阅 Joel 关于他在 Microsoft 时代的文章:
关于c# - javascript 中 DateTime.ToOADate() 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348805/