Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2017, 11:39
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

Подсчёт рабочего времени
Всем привет! Народ, подскажите где можно взять алгоритм расчёта рабочего времени для Google-script? Ну или на JS?

Нужно между двумя датами подсчитать количество рабочих часов.
Рабочий день с 9:00 до 18:00 Обед с 13:00 до 14:00 с учетом того что СБ и ВСКР - выходные. Помогите пожалуйста.

Есть функция, которая к дате добавляет несколько рабочих часов, и возвращает новую дату с временем, вот она:

function getDeadlineDate(date, work) {
  
  var datework  = 0;
  var hour      = date.getHours();
  var timehour  = hour;
  var week   = getWeekDay(date);
  
  for(;;) 
  {
    if (work >= 8) 
    { 
      work -= 8;
      datework += 1;
    }
    else
    {      
      break;
    }
  }
  
  if (week == 6)
  {
    timehour = 9;
    datework += 2;
  }
  else if (week == 7) 
  {
    datework += 1;
    timehour = 9;
  }
  
  if((hour > 18) || (hour < 9)) 
  {
    timehour = 9 + work
  }
  else
  {    
    timehour += work;
  }
  
  
  if (hour < 13 && timehour >= 14 || timehour == 13)
  {
    timehour += 1;
  }
  
  if (week < 6 && ((week + datework) >= 7 || (week + datework == 6) ))
  {
    datework += 2;  
  }
  
    if (timehour >= 18)
  {
    timehour = timehour - 18 + 9;
    datework += 1;
  }
  
  var datework  = new Date(date.valueOf() + timehour*60*60*1000 + datework*24*60*60*1000 - hour*60*60*1000);
  return datework;

}


А вот как написать функцию, чтоб именно она вычисляла разницу (в рабочих часах) между 2-мя датами - не знаю пока, уже голову сломал.

Например

Первая дата: 30.01.2017 16:43
Вторая дата: 31.01.2017 11:45

Просто если разницу в часах считать, то это 19 часов и 3 минуты разница, но именно рабочих часов в них 4 часа 02 минуты.
Функция должна вернуть: 4 часа 02 минуты, ну или 4,03 часа

Помогите пожалуйста, кто может.
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2017, 11:50
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от fenix_63
Помогите пожалуйста, кто может.
У нас есть чудесный раздел "Работа".
Объяви сумму за решение проблемы, может и желающие найдутся...
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2017, 12:18
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Переведите все точки отсчета времени в секунды, сделайте вычисления и будет вам счастье
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2017, 12:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Poznakomlus,
Ответить с цитированием
  #5 (permalink)  
Старый 31.01.2017, 14:09
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

рони,
миллисекунды если об этом
var vanDate = '30.01.2017 16:43',
  twoDate = '31.01.2017 11:45';//

function dateStringToInt(str) {
  return Date.parse(
      str.replace(/^(\d+)\.(\d+)\.(\d+)\s(\d+):(\d+)$/, '$3-$2-$1T$4:$5:00.000Z')
    ) / 1000;
}

alert((dateStringToInt(twoDate) - dateStringToInt(vanDate)) / 3600 + ' часов прошло');
Ответить с цитированием
  #6 (permalink)  
Старый 31.01.2017, 14:16
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Poznakomlus, там не разность дат нужна...
Нужно количество "рабочего времени". Если известно расписание... Перерыв на обед и выходные...
Ответить с цитированием
  #7 (permalink)  
Старый 31.01.2017, 14:28
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

ksa,
все дошло, кол-во рабочих дней надо, при 8 ч рабочем дне
Ответить с цитированием
  #8 (permalink)  
Старый 31.01.2017, 15:39
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ksa
Перерыв на обед и выходные...
Это еще и скромно. Смотря в контексте какого законодательства это, в России еще и праздничные дни попадающие на выходные переносятся. Переносы праздников, дней рабочих также возможны и постановлением правительства.
Ответить с цитированием
  #9 (permalink)  
Старый 31.01.2017, 16:35
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

Ну хотя бы если условиться что рабочие дни пн-пт с 9:00 до 18:00, обед с 13:00 до 14:00. Праздничные дни не учитываются, и переносы праздников тоже.
Ответить с цитированием
  #10 (permalink)  
Старый 31.01.2017, 18:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну тогда по логике:

Узнаем какой день недели выпадает на первую дату диапазона, и сколько дней в диапазоне. Если дата рабочая, из нее берем разницу от рабочих часов. А также можно узнать остаток времени до конца дня. Если дней в диапазоне меньше двух, берем такую же разность у второй даты диапазона, если это следующий день и рабочий.

Если в диапазоне более дней, то плюсуем к полученному от первой даты 7 часов * на каждый полный рабочий день, что можно знать опираясь на день недели первой даты диапазона. А затем уже остаток от последней даты диапазона.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расхождение во времени в 3-5 мин wadim Общие вопросы Javascript 1 21.03.2016 05:21
Подсчет времени автоматически alexgrenn Элементы интерфейса 5 06.02.2016 21:21
Динамичный подсчет времени afterman Общие вопросы Javascript 46 05.01.2016 12:46
Вывести количество часов и минут до рабочего времени Sigizmund2012 Элементы интерфейса 9 23.04.2015 11:29
Работа с jasmine подсчет времени выполнения теста voice Библиотеки/Тулкиты/Фреймворки 2 26.03.2013 17:47