当前位置: 首页 > 编程语言 > C#

javascript中DateTime.ToOADate()的等价物是什么?

时间:2023-04-10 15:33:15 C#

javascript中DateTime.ToOADate()的等价物是什么?如何在javascript中获取OADate(OLE自动化日期)?我需要以双精度值的形式传递我的日期对象(到我的网络服务)。在C#中:vard=DateTime.Now.ToOADate();js中的等价物是什么?如果您无法修改Web服务,则必须重新实现ToOADate()。MSDN说OLE自动化日期被实现为浮点数,其整数部分是1899年12月30日午夜之前或之后的天数,其小数部分表示一天中的时间除以24。例如,12月31日午夜,1899除以1.0表示;1900年1月1日早上6点用2.25表示;1899年12月29日午夜,1899年12月29日用-1.0表示;1899年12月29日早上6点用-1.25表示。因此,您应该能够编写类似varoaDate=(date-newDate(1899,11,31))/(24*60*60*1000);的内容;(另外)要将JScript日期转换为OLE自动化日期,请调用getVarDate:http://msdn.microsoft.com/en-us/library/4d4x3w61(VS.85).aspx(如果你走另一条路-也就是说,您有一个JScript对象,并且您分配了一个包含VT_DATE类型变体的属性——JScript引擎应该自动将其转换为等效的JScript日期。)如果您的浏览器提供商没有按照getVarDate方法的编写方式执行此操作,自己编写代码并不太难,但是要使一切正确,您必须处理一些涉及日期之前的特殊情况。时代。我知道让代码正确的最好方法是首先将它转换为整数的原始数量和自纪元以来的小数天数,我注意到它是12月30日的午夜,而不是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在Microsoft时代的文章:http://www.joelonsoftware.com/items/2006/06/16.html适用于DST日期的解决方案:vartoOADate=(function(){/**@const*/varutc18991230=Date.UTC(1899,11,31);/**@const*/varmsPerDay=24*60*60*1000;returnfunction(date){if(dateinstanceofDate){date=Date.UTC(date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate());}return(date-utc18991230)/msPerDay;};})();}markitondemand@Github以下专栏方式解决了它,它说明了夏令时https://github.com/markitondemand/moment-msdate/blob/master/moment-msdate.jstoOADate:function(date){vartimezoneOffset=date.getTimezoneOffset()/(60*24);varmsDateObj=(date.getTime()/86400000)+(25569-timezoneOffset);返回msDateObj;},fromOADate:function(oadate){vardate=newDate(((oadate-25569)*86400000));vartz=date.getTimezoneOffset();返回nnewDate(((oadate-25569+(tz/(60*24)))*86400000));},这些对于JS来说看起来不错,但是如果你想在PHP中将它转换为Unix时间戳,请使用以下命令://$ms_date_floating_point是MS日期//42372.3432210648转换为SunJan3rd,2016$ms_date_seconds=$ms_date_floating_point*60*60*24;$unix_timestamp_seconds=strtotime("11月11日,0:009:00")+$ms_date_seconds;修复时区偏移量:functiontoOADate(date){varmsPerDay=24*60*60*1000;varbaseDate=newDate("1899-12-30T00:00:00.000+0000");返回(date.getTime()-baseDate.getTime()-60*1000*getTimezoneOffset())/msPerDay;你应该改变你的网络服务来获得一个UNIX时间戳然后你可以在Javascript中调用newDate()。getTime()或(someDate-newDateTime(1970,1,1)).TotalMilliseconds在C#中(someDate-newDateTime(1970,1,1)).TotalMilliseconds。以上就是C#学习教程:什么相当于javascript中的DateTime.ToOADate()?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: