使用 javascript 将 SQL 日期数字转换为日期

Convert SQL date number into date using javascript

Gabriele Petrioli 请在关闭之前阅读我的问题。

我在 SQL 中的报告是每天的,并且作为日期的 INT 是完美的,两年前我测试了 Azure CosmosDB 并且我能够使用 JavaScript 进行转换我使用 UDF 完成了我现在刚好需要一个项目,运气不好,不敢相信有这么多人在没有编程技能的情况下淡化问题和管理,"managing",我会再做一次我不会放弃,但我今天需要代码. 如果管理员没有再次关闭我的问题,我将 post 解决方案。

这里是原问题:

我需要将 SQL 生成的 INT 日期转换为使用 javascript 的日期。

我知道这是可能的,我在今天糟糕的一天之前就做到了,时间紧迫。

过程如下: 我使用 SQL

将日期转换为 INT
select 'cast(getdate() as  int)'
select cast(getdate()  as  int)
-- today 43811

我需要使用 Javascript 将其取回。没有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

我再次需要使用 JavaScript
convert2date(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