js转化excel日期(亲测 ~ _~)
因使用js-xlsx读取excel得到的日期不是正常的日期格式,所以从网上找了一下转化的方法,但是没找到一个合适的,下面展示我所采坑的两个方法,分别为百度出来的前两位,望采纳
1. 采坑的两个方法
formatDate(numb, format) {
const time = new Date((numb - 1) * 24 * 3600000 + 1)
time.setYear(time.getFullYear() - 70)
const year = time.getFullYear() + ''
const month = time.getMonth() + 1 + ''
const date = time.getDate() - 1 + ''
if (format && format.length === 1) {
return year + format + month + format + date
}
return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}
此方法因为有time.getDate() - 1, 所以当转化date为1的时候会出错,如:43831
formatDate(numb, format) {
let time = new Date((numb - 1) * 24 * 3600000 + 1)
time.setYear(time.getFullYear() - 70)
let year = time.getFullYear() + ''
let month = time.getMonth() + 1 + ''
let date = time.getDate() + ''
if(format && format.length === 1) {
return year + format + month + format + date
}
return year+(month < 10 ? '0' + month : month)+(date < 10 ? '0' + date : date)
}
此方法和上个方法相似,只是将date - 1 去掉了,但是该方法在转化某些时间的时候会出错,如44202对应为2020-11-06,该方法却转化为2020-11-07
2. 最终方法
因为js-xlsx得到的数字为该时间距1900-1-1的天数,所以结合以上两个方法得到
/**
* 格式化excel传递的时间
* @param numb 需转化的时间 43853
* @param format 分隔符 "-"
* @returns {string} 2020-1-22
*/
formatExcelDate (numb, format = "-") {
// 如果numb为空则返回空字符串
if (!numb) {
return "";
}
let time = new Date(new Date("1900-1-1").getTime() + (numb - 1) * 3600*24*1000);
const year = time.getFullYear() + '';
const month = time.getMonth() + 1 + '';
const date = time.getDate();
if (format && format.length === 1) {
return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date)
}
return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}
亲测,有效!!!