4 回答
TA贡献1836条经验 获得超13个赞
用moment.js
var start = moment('2017-02-23');
var end = moment('2018-03-23');
end.diff(start, 'days'); // 393
TA贡献1794条经验 获得超8个赞
这个其实是一个用户体验问题,
如果当前月份是非闰年的2月,那么你如果零头算出来是29,30,客户就会觉得很奇怪,
如果你当前月份是7月是31天的,你零头算出来是30,客户反而会觉得可以接受,
所以你可以根据当前月份来决定最后28,29,30,31的这些零头是否要进位。。
TA贡献1776条经验 获得超12个赞
var mons = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
function isLeapYear(year) {
var r = year / 100
if (r === parseInt(r)) {
r = year / 400
return r === parseInt(r)
}
r = year / 4
if (r === parseInt(r)) {
return true
}
return false
}
function getDaysOfMonth(month, year) {
if (month === 2 && isLeapYear(year)) {
return 29
}
return mons[month]
}
function getMonthsOfYear(year) {
if (isLeapYear(year)) {
return 366
}
return 365
}
function diff(s1, s2) {
var arr1 = s1.split('-').map(Number)
var arr2 = s2.split('-').map(Number)
var [year, month, day] = arr2.map((n, i) => n - arr1[i])
if (day < 0) {
day += getDaysOfMonth(arr2[1], arr2[0])
month--
}
if (month < 0) {
month += getMonthsOfYear(arr2[0])
year--
}
return [year, month, day]
}
var d1_str = '2017-3-11'
var d2_str = '2018-3-26'
console.log(diff(d1_str, d2_str))
添加回答
举报
