我需要將總工作經驗計算爲年度值。用戶將其開始和結束日期的經驗添加到他們的簡歷中,就像LinkedIn一樣。但沒有任何一定的模式。例如;計算總工作經驗
用戶可能有這樣的簡歷;
經驗2 08.2012 - 01.2015
經驗1 01.2011 - 01.2013
用戶開始他們的第二個經驗,同時第一個還沒有完成。所以簡歷可能會有許多重疊的經歷。重疊也可能發生在2個以上。所以我需要考慮很多情況。
我試圖爲您呈現體驗和年度關係。
我只需要開發一種算法涵蓋所有的情況下,針對此問題。
我需要將總工作經驗計算爲年度值。用戶將其開始和結束日期的經驗添加到他們的簡歷中,就像LinkedIn一樣。但沒有任何一定的模式。例如;計算總工作經驗
用戶可能有這樣的簡歷;
經驗2 08.2012 - 01.2015
經驗1 01.2011 - 01.2013
用戶開始他們的第二個經驗,同時第一個還沒有完成。所以簡歷可能會有許多重疊的經歷。重疊也可能發生在2個以上。所以我需要考慮很多情況。
我試圖爲您呈現體驗和年度關係。
我只需要開發一種算法涵蓋所有的情況下,針對此問題。
(Jan 2012, Jan 2015), (Jan 2014, Dec 2016)
重疊,因此我們將其視爲單一體驗(Jan 2012, Dec 2016)
這是假設,有可能在經驗的差距,所以我們不希望把整個歷史,一個長的「超級體驗」
創建一個數組充滿了0。元素範圍:開始將是第一個僱傭日期,最後是當前日期/上一個工作日期。每年你有12個元素可以是0/1。填充數組後,計算具有值1的元素。如果需要考慮重疊,則忽略0/1部分,併爲每個工作月份給予+1。
experiences = [
# (start date, end date),
(date(2012, 8, 1), date(2015, 1, 30)),
(date(2011, 1, 1), date(2013, 1, 30))
]
print(sum((end_date - start_date).days/365 for start_date, end_date in experiences))
我只是做這個
正如你可以看到每次我們設置新的結束,如果經驗的結局比我們的更大。
在我們得到的幾個月裏,如果除以12,你得到的歲月正好可以圓,如果你想
注意結尾:我映射的經驗,如果沒有結束就意味着相當於到現在
你可以看到下面
function monthDiff(d1, d2) {
var m = (d1.getFullYear() - d2.getFullYear()) * 12 +
(d1.getMonth() - d2.getMonth());
if (d1.getDate() < d2.getDate()) --m;
return m;
}
function dateCheck(from, to, check) {
var fDate, lDate, cDate;
fDate = Date.parse(from);
lDate = Date.parse(to);
cDate = Date.parse(check);
if (cDate <= lDate && cDate >= fDate) {
return true;
}
return false;
}
function calculateYearsOfExperience(experiences) {
if (!experiences) return 0;
let months = 0;
let now = new Date();
let sorted = experiences
.sort((a, b) => {
return new Date(a.begin) - new Date(b.begin);
})
.map(experience => {
if (!experience.end) experience.end = now;
return { begin: experience.begin, end: experience.end };
});
let begin;
let end;
for (var i in sorted) {
let dif = 0;
if (!end && !begin) {
dif = monthDiff(sorted[i].begin, sorted[i].end);
begin = sorted[i].begin;
end = sorted[i].end;
} else if (
!dateCheck(begin, end, sorted[i].begin) &&
!dateCheck(begin, end, sorted[i].end)
) {
dif = monthDiff(sorted[i].begin, sorted[i].end);
end = sorted[i].end;
} else if (dateCheck(begin, end, sorted[i].begin)) {
dif = monthDiff(end, sorted[i].end);
end = sorted[i].end;
}
months += dif;
}
return months/12;
}
所有代碼