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

问题描述 投票:0回答:1

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

javascript date-conversion excel-dates
1个回答
1
投票

您拥有的是从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
© www.soinside.com 2019 - 2024. All rights reserved.