2014-12-17 4 views
0

Я пытаюсь выяснить, как наилучшим образом рассчитать опыт работы с помощью momentjs.расчет опыта работы с momentjs

Допустим, у меня были следующие работы:

  1. с декабря 2013 года 15 - 15 марта 2013
  2. от 20 февраля 2013 - июнь 2013 1.
  3. с 1 сентября 2013 года - декабрь 1 2013.

, как вы можете видеть, что есть перекрытие между работой 1 и 2, и существует разрыв между работой 2 и 3. задача состоит в том, что я просто не могу рассчитать разницу ставки ween начало работы 1 и конец работы 3, так как есть разрыв между заданием 2 и заданием 3. С другой стороны, я не могу просто добавить timediff для каждого задания, так как существует перекрытие между заданием 1 и заданием 2 .

Любые данные о том, как справиться с этим, оцениваются.

спасибо,

Томас

ответ

0

Эта проблема, к сожалению, не решаемая с moment.js. Но я написал для вас простое решение, используя целые числа как start end end значения:

calc_duration = function(list) { 

    // calculate the duration and add it to the list elements 
    // when you are working with you need to adjust how x.duration 
    // is retrieved 
    list_with_duration = list.map(function(x){ 
    x.duration = x.end - x.start 
    return x 
    }).sort(function(a,b){ 
    return a.start > b.start 
    }); 

    // sums all the durations together except for overlapping dates, there it 
    // will only add the time span of the second date that exclusive of the 
    // first date 
    total_duration = list_with_duration.reduce(function(sum, curr, i, list){ 
    if (i == 0 || list[i-1].end < curr.start) { 
     return sum + curr.duration; 
    } else if (list[i-1].end > curr.end) { 
     return sum; 
    } else { 
     return sum + curr.end - list[i-1].end; 
    } 
    }, 0); 

    return total_duration; 

} 


calc_duration([{start: 0, end: 10},{start: 5, end: 15},{start:20, end: 30}]) 
//returns 25 

calc_duration([{start: 20, end: 30},{start: 5, end: 50},{start:0, end: 10}]) 
//returns 50 
Смежные вопросы