подсчет опыта работы с momentjs

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

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

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

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

Любой вклад в то, как решить эту проблему лучше всего, приветствуется.

Благодарность,

Томас


person ThomasD    schedule 17.12.2014    source источник


Ответы (1)


К сожалению, эта проблема не решается с помощью 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
person Lazybensch    schedule 22.12.2014