Gabriele Petrioli,请在关闭它之前先阅读我的问题。
我的SQL报告是每天的,并且INT作为Date是完美的,两年前,我测试了Azure CosmosDB,并且能够使用JavaScript进行转换,而使用UDF进行了转换,现在我只是需要一个项目和运气,可以相信没有这么多人会淡化问题并在没有编程技能和“管理”的情况下进行管理,我会再做一次,我不会放弃,但今天我需要代码。如果经理们再也没有结束我的问题,我将发布解决方案。
这里是原始问题:
我需要使用javascript将SQL生成的INT日期转换为Date。
我知道这是可能的,我今天过了糟糕的一天,时间已经过去了。
以下是过程:我使用SQL将日期转换为INT
select 'cast(getdate() as int)'
select cast(getdate() as int)
-- today 43811
我需要使用Java脚本将其恢复。没有Jquery或其他。
--more exaples
select 'cast(40702 as smalldatetime)'
select cast(40702 as smalldatetime)
--output 2011-06-10 00:00:00
select 'cast(getdate() as float)'
select cast(getdate() as float)
-- output 43810.6597960262
同样,我需要使用JavaScriptconvert2date(40702)-> 2011-06-10
convert2date(43811)-> 2019-12-14
您拥有的是从1900-01-01开始的天数,您需要添加给定的天数。
function convert2date(days) {
const
isLeapYear = year => (!(year % 4) && !!(year % 100)) || !(year % 400),
daysInMonth = (month, year) => [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1] + isLeapYear(year);
var date = [1900, 1, 1],
y = isLeapYear(date[0]) + 365,
d;
while (days >= y) {
date[0]++;
days -= y;
y = isLeapYear(date[0]) + 365;
}
d = daysInMonth(date[1], date[0]);
while (days >= d) {
date[1]++;
days -= d;
d = daysInMonth(date[1], date[0]);
}
date[2] += days;
return date.map((v, i) => v.toString().padStart(i ? 2 : 4, 0)).join('-');
}
console.log(convert2date(40702)); // 2011-06-10
console.log(convert2date(43811)); // 2019-12-14