javascript读取excel中的时间的格式问题

excel表格导入到Mysql数据库时,发现在使用js-xlsx读取excel中的时间时会读取成一串时间数字,这串数字是excel自有的时间戳,直接使用`new Date()`并不能获取时间对象。

我的思路是把excel的时间戳转换为unix的时间戳,然后通过`new Date()`获取时间对象在转换为MySQLDATETIME格式。
比如在表格中显示`2021/5/6 9:30 `使用程序读取就会变成成 `44322.395833333336`

要将这串数字转换为JavaScript的时间对象,可以将excel的时间戳转换为NUIX时间戳,然后通过`new Date()`获取时间对象。公式如下:

UnixTimestamp=(excelTimestamp-70*365-19)*86400-8*3600 //excel 时间戳转换为 unix时间戳

 


function getDate(excelTimestamp){
    //使用JavaScript转换unix时间戳需要将时间戳再*1000
    return new Date(((excelTimestamp-70*365-19)*86400-8*3600)*1000);
}

getDate(44322.395833333336);
//Thu May 06 2021 09:30:00 GMT+0800 (中国标准时间)

获取时间对象后只需要操作字符串转换为 MySQL 的 DATETIME 格式就OK了

 toMysqlData_1(time){
        if(typeof time != 'number') throw new Error("请传入时间戳");
        time = new Date(1000*parseInt(((time-70*365-19)*86400-8*3600)));
        time = time.toLocaleDateString()+" "+time.toLocaleTimeString();     
        let times = time;
        //切割时间字符串 "2021/5/6 上午11:45:00"
        time = time.split("上午").join('');
        time = time.split("下午").join('');
        time = time.split(' ');
        time[0] = time[0].split("/");
        time[1] = time[1].split(":");
        //字符串切割完成后会变成多维数组,需要扁平化操作。
        time = time.flat();
        time.forEach((itme,index)=>{
            //如果时间只有个位数则在前面加上'0'
            time[index] = itme.length < 2 ? '0'+itme:itme;
        })
        return  `${time[0]}-${time[1]}-${time[2]} ${
            (times.split("下午").length === 2 &&  parseInt(time[3]) != 12 ? parseInt(time[3]) + 12 : time[3])
            //转化为24小时格式  "2021-05-06 16:45:00" 
        }:${time[4]}:${time[5]}`;
    } 

 

toMysqlData_2(time){
        if(typeof time != 'number') throw new Error("请传入时间戳");
        time = new Date(1000*parseInt(((time-70*365-19)*86400-8*3600)));
        time = time.toLocaleDateString()+" "+time.toLocaleTimeString(); 
        let times = time;
        let temp = [''];
        //将 2021/5/6 下午8:00:00 转换成 [2021,5,6,2,8,00,00]
        time.split('').forEach((v)=>{
            if(!isNaN(parseInt(v))) temp[temp.length-1] += v;
            else temp.push("");
        })
        //在转换完毕后,应为逻辑问题数组中会出现空元素
        time = temp;
        console.log(time);
        for(let index = 0 ; index < time.length;index++){
            //去除数组中的空元素
            if(time[index] === '') {time.splice(index,1) ; index--};
            //如果时间只有个位数则在前面加上'0'
            console.log(times);
            time[index] = time[index].length < 2 ? '0' + time[index] : time[index];
        }
        
        return  `${time[0]}-${time[1]}-${time[2]} ${
            (times.split("下午").length === 2 &&  parseInt(time[3]) != 12 ? parseInt(time[3]) + 12 : time[3])
            //转化为24小时格式  "2021-05-06 16:45:00" 
        }:${time[4]}:${time[5]}`;
    }   

 


版权声明:本文为qq_42128717原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。