Думаю все примеры так делают, его точно не просчитать, типо конвертируюй в милисекунды потом найди разницу и раздели на тот тип числа которое тебе надо день, час, минута и тп
вчера сделал 🙂 кривовато, потом причешу
есть 2 даты
есть значение первого дня недели (0 или 1) типо вс или пн.
считаем количество дней между датами
потом первую дату перемещаем на ближайший первый день (вперед), а вторую на ближайший конец недели (назад) это просто, что-то в стиле getDate() - getDay()
потом считаем количество недель между полученными датами
потом или из первоначального количества дней вычитаем размер "сдвигов" или считаем заново количество дней между полученными датами (дни которые покрылись целыми неделями) и вычитаем из первоначального количества дней
таким образом "количество дней" превращается в количество дней которые непокрыты целыми неделями (остаток)
а количество недель посчиталось между целыми неделями
+ есть доп условия, когда start > end (типо вторник-выходные-среда) в этом случае "остатком" будет являться все
готово