百度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 年是闰年,所以我们拿到的天数都会多了一天,因为转换之前还需要先进行减一操作…
还是