无需做任何数学运算即可将其归结为一行。
// serialDate is whole number of days since Dec 30, 1899
// offsetUTC is -(24 - your timezone offset)
function SerialDateToJSDate(serialDate, offsetUTC) {
return new Date(Date.UTC(0, 0, serialDate, offsetUTC));
}
我在 PST,它是 UTC-0700,所以我曾经offsetUTC = -17
将 00:00 作为时间(24 - 7 = 17)。
如果您以串行格式从 Google 表格中读取日期,这也很有用。文档建议连续剧可以有一个小数来表示一天的一部分:
指示日期、时间、日期时间和持续时间字段以“序列号”格式输出为双精度值,如 Lotus 1-2-3 所流行的那样。该值的整数部分(小数点左边)计算自 1899 年 12 月 30 日以来的天数。小数部分(小数点右边)将时间计算为一天的一小部分。例如,1900 年 1 月 1 日中午是 2.5,2 因为它是 1899 年 12 月 30 日之后的 2 天,0.5 因为中午是半天。1900 年 2 月 1 日下午 3 点将是 33.625。这正确地将 1900 年视为不是闰年。
因此,如果您想支持带小数的序列号,则需要将其分开。
function SerialDateToJSDate(serialDate) {
var days = Math.floor(serialDate);
var hours = Math.floor((serialDate % 1) * 24);
var minutes = Math.floor((((serialDate % 1) * 24) - hours) * 60)
return new Date(Date.UTC(0, 0, serialDate, hours-17, minutes));
}