javascript读取excel中的时间的格式问题
把excel表格导⼊到Mysql数据库时,发现在使⽤js-xlsx读取excel中的时间时会读取成⼀串时间数字,这串数字是excel⾃有的时间戳,直接使⽤`new Date()`并不能获取时间对象。
我的思路是把excel的时间戳转换为unix的时间戳,然后通过`new Date()`获取时间对象在转换为MySQL的DATETIME格式。
⽐如在表格中显⽰`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 = LocaleDateString()+" "+LocaleTimeString();
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 = LocaleDateString()+" "+LocaleTimeString();
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++){
//去除数组中的空元素
unix时间戳转换日期格式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:729038198,我们将在24小时内删除。
发表评论