我该如何在JavaScript中获取OADate(OLE自动化日期)? 我需要以双精度值的形式传递我的日期对象(给我的Web服务)。
在C#中:
var d = DateTime.Now.ToOADate();
在JavaScript中相当于什么?
我该如何在JavaScript中获取OADate(OLE自动化日期)? 我需要以双精度值的形式传递我的日期对象(给我的Web服务)。
在C#中:
var d = DateTime.Now.ToOADate();
在JavaScript中相当于什么?
ToOADate()
。因此,您应该能够编写类似以下内容的代码:OLE自动化日期是实现为浮点数的数字,其整数部分是午夜前或午夜后的天数,即1899年12月30日,其小数部分表示当天的时间除以24。例如, 1899年12月31日午夜表示为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);
(未经测试)
toOADate: function (date) {
var timezoneOffset = date.getTimezoneOffset() / (60 * 24);
var msDateObj = (date.getTime() / 86400000) + (25569 - timezoneOffset);
return msDateObj;
},
fromOADate: function (oadate) {
var date = new Date(((oadate - 25569) * 86400000));
var tz = date.getTimezoneOffset();
return new Date(((oadate - 25569 + (tz / (60 * 24))) * 86400000));
},
var toOADate = (function () {
/** @const */ var utc18991230 = Date.UTC(1899, 11, 31);
/** @const */ var msPerDay = 24 * 60 * 60 * 1000;
return function (date) {
if (date instanceof Date) {
date = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
}
return (date - utc18991230) / msPerDay;
};
})();
修复时区偏移:
function toOADate(date) {
var msPerDay = 24 * 60 * 60 * 1000;
var baseDate = new Date("1899-12-30T00:00:00.000+0000");
return (date.getTime() - baseDate.getTime() - 60*1000*getTimezoneOffset()) / msPerDay;
}
这些对于JS来说看起来不错,但如果你想在PHP中将其转换为Unix时间戳,请使用以下代码:
// $ms_date_floating_point is the MS date
// 42372.3432210648 converts to Sun Jan 3rd, 2016
$ms_date_seconds = $ms_date_floating_point * 60 * 60 * 24;
$unix_timestamp_seconds = strtotime("Nov 11, 1899 00:00:00") + $ms_date_seconds;
你应该更改你的 Web 服务以接受 UNIX 时间戳。
然后,你可以在 JavaScript 中调用 new Date().getTime()
,或者在 C# 中调用 (someDate - new DateTime(1970, 1, 1)).TotalMilliseconds
。
var oaDate = (date - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000)
- xanatos