百度99%的人都是代码如下实现:
// excel读取2018/01/01这种时间格式是会将它装换成数字类似于46254.1545151415 numb是传过来的整数数字,format是之间间隔的符号
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)
},
console.log(formatDate(42618, '/')) // 2016-9-5
这段代码在正常平年是没有问题。但是移到闰年就出现了问题。这是js读取excel的时间如2020/5/4,是从1900/0/0开始到2020/5/4的天数,而new Date()的开始时间1970年。所以导致了上面这段代码得到time是2090,而2090不是闰年。所以导致了本来应该显示2020/5/4,结果显示了2020/5/5。
上面代码new Date((numb - 1) * 24 * 3600000 + 1)修改为new Date(1900,0,(numb - 1)),nump是js读取是从1900/0/0到excel的日期的天数。为什么要nump-1.是因为Excel 中有个 bug:
它以为 1900 年是闰年,所以我们拿到的天数都会多了一天,因为转换之前还需要先进行减一操作…
还是
探讨了JavaScript从Excel读取日期时遇到的闰年问题及解决方案,详细解析了代码实现并指出了1900年闰年Bug的影响。

被折叠的 条评论
为什么被折叠?



