当前端导入excell里的数据时,只能获取到下面类似的这种数据
Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1。
转化的思路和对Excel中的错误的处理
因为时间戳是从1970年1月1日算起的(时间戳为0的时候是1970年1月1日)也就是说new Date(0).toLocaleDateString('zh')的值是1970/1/1。
而1970年1月1日这一天在Excel中是25569,那就令从Excel中获取到的值减去25569,然后再乘以24*60*60*1000获取到这一天的毫秒数,再new Date(这个毫秒数)就能得到转换后的日期了。
就是当Excel的值小于61的时候转换的时间跟正常时间相差一天
最终代码
/** * 格式化Excel表中存储的年月日日期 * @param {number} num - excel存储的数字 * @param {string} [format = '-'] - 年月日的间隔符,默认为'-' * @returns {string} 格式化后的日期 */ function formatExcelDate(num, format = '-') { if (!/^\d+$/.test(num)) return num = parseInt(num) let millisecond = 0 // 转化后的毫秒数 if (num > 60) { // 对大于60的日期进行减1处理 millisecond = (num - 25568 - 1) * 3600 * 24 * 1000 } else { millisecond = (num - 25568) * 3600 * 24 * 1000 } const date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间 const yy = date.getFullYear() const m = date.getMonth() + 1 const mm = m >= 10 ? m : '0' + m const d = date.getDate() const dd = d >= 10 ? d : '0' + d return yy + format + mm + format + dd // 返回格式化后的日期 }
原创出处
标签:millisecond,const,format,前端,Excel,1970,excell,num,上传 From: https://www.cnblogs.com/wcq520/p/18222101